feat/error-handling-browser (#22) #4
This file contains hidden or 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
| name: Build and Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_type: | |
| description: 'Release type' | |
| required: true | |
| default: 'prerelease' | |
| type: choice | |
| options: | |
| - prerelease | |
| - release | |
| push: | |
| branches: [main] | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-and-release: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: oven-sh/setup-bun@v2 | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.bun/install/cache | |
| key: ${{ runner.os }}-bun-${{ hashFiles('bun.lockb') }} | |
| restore-keys: ${{ runner.os }}-bun- | |
| - name: Install dependencies | |
| run: bun install | |
| - name: Run checks | |
| run: bun run compile && bun run lint | |
| - name: Get version from package.json | |
| id: pkg | |
| run: echo "version=$(jq -r .version package.json)" >> $GITHUB_OUTPUT | |
| - name: Check version not already released | |
| if: github.event_name == 'workflow_dispatch' && inputs.release_type == 'release' | |
| run: | | |
| if gh release view "v${{ steps.pkg.outputs.version }}" &>/dev/null; then | |
| echo "::error::Version v${{ steps.pkg.outputs.version }} already exists. Please update version in package.json" | |
| exit 1 | |
| fi | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Build Chrome extension | |
| run: bun run zip | |
| - name: Build Firefox extension | |
| run: bun run zip:firefox | |
| - name: Set release info | |
| id: release | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ inputs.release_type }}" = "release" ]; then | |
| echo "tag=v${{ steps.pkg.outputs.version }}" >> $GITHUB_OUTPUT | |
| echo "name=v${{ steps.pkg.outputs.version }}" >> $GITHUB_OUTPUT | |
| echo "prerelease=false" >> $GITHUB_OUTPUT | |
| else | |
| NIGHTLY_TAG="nightly-$(date +'%Y-%m-%d')" | |
| echo "tag=$NIGHTLY_TAG" >> $GITHUB_OUTPUT | |
| echo "name=Nightly Build ($(date +'%Y-%m-%d'))" >> $GITHUB_OUTPUT | |
| echo "prerelease=true" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Delete existing nightly release for today | |
| if: steps.release.outputs.prerelease == 'true' | |
| run: | | |
| gh release delete ${{ steps.release.outputs.tag }} --yes || true | |
| git push origin :refs/tags/${{ steps.release.outputs.tag }} || true | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create release | |
| run: | | |
| if [ "${{ steps.release.outputs.prerelease }}" = "true" ]; then | |
| gh release create ${{ steps.release.outputs.tag }} \ | |
| --prerelease \ | |
| --title "${{ steps.release.outputs.name }}" \ | |
| --notes "Auto-generated development build from main branch. | |
| **Commit:** ${{ github.sha }}" \ | |
| .output/*.zip | |
| else | |
| gh release create ${{ steps.release.outputs.tag }} \ | |
| --title "${{ steps.release.outputs.name }}" \ | |
| --generate-notes \ | |
| .output/*.zip | |
| fi | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Job summary | |
| run: | | |
| echo "## 🚀 Build Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Item | Value |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|-------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Version | \`${{ steps.pkg.outputs.version }}\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Tag | \`${{ steps.release.outputs.tag }}\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Type | ${{ steps.release.outputs.prerelease == 'true' && '🧪 Prerelease' || '✅ Release' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### 📦 Artifacts" >> $GITHUB_STEP_SUMMARY | |
| ls -lh .output/*.zip | awk '{print "- `" $NF "` (" $5 ")"}' >> $GITHUB_STEP_SUMMARY |