Skip to content

Build and deploy

Build and deploy #193

Workflow file for this run

# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Build and deploy
on:
push:
branches: ["master"]
workflow_dispatch:
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
get-branches:
permissions:
contents: read
outputs:
branches: ${{ steps.get-branches.outputs.branches }}
runs-on: ubuntu-latest
steps:
- name: Get list of remote branches and their hashes
id: get-branches
run: |
if [ "${{ runner.debug }}" = "1" ]; then
set -x
fi
git clone --no-checkout "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" .
git fetch --all
branches="$(git for-each-ref --format='{"name":"%(refname:short)","hash":"%(objectname)"}' refs/remotes/origin/ | sed 's|origin/||' | jq -sc 'map(select(.name != "origin"))')"
echo "$branches" | jq .
echo "branches=$branches" >> $GITHUB_OUTPUT
build:
permissions:
contents: read
outputs:
branches: ${{ needs.get-branches.outputs.branches }}
strategy:
matrix:
branches: ${{fromJson(needs.get-branches.outputs.branches)}}
runs-on: ubuntu-latest
needs: get-branches
continue-on-error: true
steps:
- uses: actions/checkout@v4
with:
ref: ${{ matrix.branches.name }}
- name: Check if compile is needed for this branch
id: check_dir
run: |
if [ "${{ runner.debug }}" = "1" ]; then
set -x
fi
if [ -d "puck-ntag215-manager" ]; then
echo "exists=true" | tee "$GITHUB_OUTPUT"
else
echo "exists=false" | tee "$GITHUB_OUTPUT"
fi
- name: Use Node.js
if: ${{ steps.check_dir.outputs.exists == 'true' }}
uses: actions/setup-node@v4
- name: Build web app
if: ${{ steps.check_dir.outputs.exists == 'true' }}
run: |
if [ "${{ runner.debug }}" = "1" ]; then
set -x
fi
cd puck-ntag215-manager
npm install --no-optional
npm run build
- name: Upload artifact
if: ${{ steps.check_dir.outputs.exists == 'true' }}
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.branches.hash }}
path: ./puck-ntag215-manager/dist/
# Deployment job
deploy:
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: "./artifacts"
- name: List files
run: find . -type f
- name: Prepare artifacts
env:
branches: ${{ needs.build.outputs.branches }}
run: |
if [ "${{ runner.debug }}" = "1" ]; then
set -x
fi
echo "$branches" | jq -c '.[]' | while read -r branch; do
name="$(echo "$branch" | jq -r '.name')"
hash="$(echo "$branch" | jq -r '.hash')"
echo "Working on branch $name — $hash"
if [ ! -d "./artifacts/$hash" ]; then
echo "Artifact not found for $hash, skipping"
continue
fi
if [ "$name" == "master" ]; then
mkdir -p "dist/"
(cd "./artifacts/$hash" && mv * "../../dist/")
else
mkdir -p "dist/$name"
(cd "./artifacts/$hash" && mv * "../../dist/$name/")
fi
rmdir "./artifacts/$hash"
done
- name: List files
run: find . -type f
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: dist/
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4