ci: refactor release workflow to use workflow_run and improve artifac… #6
Workflow file for this run
  
    
      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: Create/Update Release | |
| on: | |
| workflow_run: | |
| workflows: ["Build ISO"] | |
| types: | |
| - completed | |
| branches: | |
| - main | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| workflow_dispatch: | |
| env: | |
| MAX_RETRIES: 3 | |
| RETRY_DELAY: 30 | |
| permissions: | |
| contents: write | |
| issues: write | |
| jobs: | |
| update-release: | |
| # Alleen uitvoeren als de build succesvol was | |
| if: ${{ github.event.workflow_run.conclusion == 'success' }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| issues: write | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up environment variables | |
| id: env | |
| run: | | |
| echo "VERSION=$(date +'%Y.%m.%d')" >> $GITHUB_ENV | |
| echo "BUILD_ID=$(date +'%Y%m%d_%H%M%S')" >> $GITHUB_ENV | |
| - name: Generate Release Notes | |
| run: | | |
| # Create release notes header | |
| echo "# 🚀 Release ${{ env.VERSION }}" > release_notes.md | |
| echo "" >> release_notes.md | |
| # Add recent changes | |
| echo "## 📝 Recent Changes" >> release_notes.md | |
| echo "" >> release_notes.md | |
| git log --pretty=format:"- %s" -n 10 >> release_notes.md | |
| echo "" >> release_notes.md | |
| echo "" >> release_notes.md | |
| # Add package information if available | |
| if [ -f "updates.txt" ]; then | |
| echo "## 📦 Updated Packages" >> release_notes.md | |
| echo "\`\`\`" >> release_notes.md | |
| cat updates.txt >> release_notes.md | |
| echo "\`\`\`" >> release_notes.md | |
| echo "" >> release_notes.md | |
| fi | |
| # Add changelog if available | |
| if [ -f "changelog.txt" ]; then | |
| echo "## 📋 Package Changelog" >> release_notes.md | |
| cat changelog.txt >> release_notes.md | |
| fi | |
| # Add build information | |
| echo "" >> release_notes.md | |
| echo "## 🔧 Build Information" >> release_notes.md | |
| echo "- Build ID: \`${{ env.BUILD_ID }}\`" >> release_notes.md | |
| echo "- Commit: \`$(git rev-parse HEAD)\`" >> release_notes.md | |
| echo "- Branch: \`${GITHUB_REF#refs/heads/}\`" >> release_notes.md | |
| echo "- Build Date: \`$(date -u '+%Y-%m-%d %H:%M:%S UTC')\`" >> release_notes.md | |
| - name: Update Release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| # Check if release exists | |
| if gh release view "${{ env.VERSION }}" &>/dev/null; then | |
| echo "Updating existing release ${{ env.VERSION }}" | |
| gh release edit "${{ env.VERSION }}" \ | |
| --title "Release ${{ env.VERSION }}" \ | |
| --notes-file release_notes.md | |
| else | |
| echo "Creating new release ${{ env.VERSION }}" | |
| gh release create "${{ env.VERSION }}" \ | |
| --title "Release ${{ env.VERSION }}" \ | |
| --notes-file release_notes.md \ | |
| --target "${GITHUB_REF#refs/heads/}" | |
| fi | |
| - name: Download ISO Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iso-files | |
| path: ./iso-files | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| run-id: ${{ github.event.workflow_run.id }} | |
| repository: ${{ github.repository }} | |
| - name: Verify ISO Files | |
| run: | | |
| if [ ! -d "./iso-files" ] || [ -z "$(ls -A ./iso-files)" ]; then | |
| echo "::error::ISO files not found in artifacts" | |
| exit 1 | |
| fi | |
| echo "Found ISO files:" | |
| ls -la ./iso-files/ | |
| - name: Update Release with ISO | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| retries=0 | |
| max_retries=${{ env.MAX_RETRIES }} | |
| while [ $retries -lt $max_retries ]; do | |
| if gh release view "${{ env.VERSION }}" &>/dev/null; then | |
| gh release edit "${{ env.VERSION }}" \ | |
| --title "Release ${{ env.VERSION }}" \ | |
| --notes-file release_notes.md && \ | |
| gh release upload "${{ env.VERSION }}" ./iso-files/* && break | |
| else | |
| gh release create "${{ env.VERSION }}" \ | |
| --title "Release ${{ env.VERSION }}" \ | |
| --notes-file release_notes.md \ | |
| --target ${GITHUB_REF#refs/heads/} \ | |
| ./iso-files/* && break | |
| fi | |
| retries=$((retries + 1)) | |
| [ $retries -lt $max_retries ] && sleep ${{ env.RETRY_DELAY }} | |
| done | |
| if [ $retries -eq $max_retries ]; then | |
| echo "::error::Failed to create/update release after $max_retries attempts" | |
| exit 1 | |
| fi | |
| - name: Upload Build Logs | |
| if: always() | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: release-logs-${{ env.BUILD_ID }} | |
| path: release_notes.md | |
| retention-days: 7 | |
| - name: Notify on Failure | |
| if: failure() | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| uses: actions/github-script@v6 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| await github.rest.issues.create({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| title: '❌ Release Update Failed', | |
| body: `The release update workflow failed on ${new Date().toISOString()}\n\nBuild ID: ${process.env.BUILD_ID}\n\nPlease check the workflow logs for details.` | |
| }); |