.github/workflows/build.yml
name: Dejavu - Node.js Build and Release Workflow
on:
release:
types: [published]
repository_dispatch:
types: [publish_binary]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository with submodules
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- name: Set up Node.js 20 LTS
uses: actions/setup-node@v3
with:
node-version: '20'
cache: 'yarn'
- name: Install dependencies
run: yarn
- name: Extract version from payload
id: get_version
if: ${{ github.event_name == 'repository_dispatch' }}
run: echo "version=${{ github.event.client_payload.version }}" >> $GITHUB_OUTPUT
- name: Get Version For Release
id: get_version_release
if: ${{ github.event_name != 'repository_dispatch' }}
uses: battila7/get-version-action@v2.2.1
- name: Determine Version
id: set_version
run: |
if [ -n "${{ steps.get_version.outputs.version }}" ]; then
echo "version=${{ steps.get_version.outputs.version }}" >> $GITHUB_OUTPUT
elif [ -n "${{ steps.get_version_release.outputs.version }}" ]; then
echo "version=${{ steps.get_version_release.outputs.version }}" >> $GITHUB_OUTPUT
else
echo "Error: Version is not set."
exit 1
fi
- name: Build Dejavu App
run: yarn build:dejavu:app
- name: Zip the dist folder
run: |
zip -r dist-${{ steps.set_version.outputs.version }}.zip ./packages/dejavu-main/dist
# Fetch release by tag and get upload_url, stripping the placeholder
- name: Get upload_url for release
if: ${{ github.event_name == 'repository_dispatch' }}
id: get_release
run: |
release_data=$(curl -s \
-H "Authorization: token ${{ secrets.PAT }}" \
"https://api.github.com/repos/${{ github.repository }}/releases/tags/${{ steps.set_version.outputs.version }}")
upload_url=$(echo "$release_data" | jq -r '.upload_url' | sed -e "s/{?name,label}//")
if [ "$upload_url" == "null" ]; then
echo "Error: Release not found for tag ${steps.set_version.outputs.version}"
exit 1
fi
echo "upload_url=$upload_url" >> $GITHUB_OUTPUT
- name: Upload dist.zip to GitHub Release (using curl)
run: |
curl -X POST \
-H "Authorization: token ${{ secrets.PAT }}" \
-H "Content-Type: application/zip" \
--data-binary @./dist-${{ steps.set_version.outputs.version }}.zip \
"${{ steps.get_release.outputs.upload_url }}?name=dejavu-dist-${{ steps.set_version.outputs.version }}.zip"
# For release events, use the upload_url from the event payload
- name: Upload dist.zip to GitHub Release (release event)
if: ${{ github.event_name == 'release' }}
run: |
upload_url="${{ github.event.release.upload_url }}"
# Strip the placeholder
upload_url="${upload_url%\{*}"
curl -X POST \
-H "Authorization: token ${{ secrets.PAT }}" \
-H "Content-Type: application/zip" \
--data-binary @./dist-${{ steps.set_version.outputs.version }}.zip \
"${upload_url}?name=dejavu-dist-${{ steps.set_version.outputs.version }}.zip"