Build and deploy #193
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |