Merge pull request #12 from d3nn3s08/copilot/update-docker-publish-wo… #34
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 & Publish FilamentHub | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - beta | |
| paths: | |
| - ".github/workflows/**" | |
| - "app/**" | |
| - "services/**" | |
| - "backend/**" | |
| - "scripts/**" | |
| - "frontend/**" | |
| - "alembic.ini" | |
| - "requirements.txt" | |
| - "Dockerfile" | |
| - "entrypoint.sh" | |
| - "run.py" | |
| - "config.yaml" | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # ------------------------------------------------------------ | |
| # 1. Checkout | |
| # ------------------------------------------------------------ | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| # ------------------------------------------------------------ | |
| # 2. Version aus config.yaml lesen | |
| # ------------------------------------------------------------ | |
| - name: Read current version | |
| id: version | |
| run: | | |
| ver=$(python - << 'EOF' | |
| import yaml | |
| with open("config.yaml") as f: | |
| print(yaml.safe_load(f)["app"]["version"]) | |
| EOF | |
| ) | |
| echo "version=$ver" >> $GITHUB_OUTPUT | |
| # ------------------------------------------------------------ | |
| # 3. Channel bestimmen (main = stable, beta = prerelease) | |
| # ------------------------------------------------------------ | |
| - name: Detect channel | |
| id: channel | |
| run: | | |
| if [ "${GITHUB_REF##*/}" = "beta" ]; then | |
| echo "channel=beta" >> $GITHUB_OUTPUT | |
| echo "docker_main_tag=beta" >> $GITHUB_OUTPUT | |
| echo "docker_version_tag=${{ steps.version.outputs.version }}-beta" >> $GITHUB_OUTPUT | |
| echo "suffix=-beta" >> $GITHUB_OUTPUT | |
| echo "prerelease=true" >> $GITHUB_OUTPUT | |
| echo "release_tag=v${{ steps.version.outputs.version }}-beta.${{ github.run_number }}" >> $GITHUB_OUTPUT | |
| echo "release_name=FilamentHub v${{ steps.version.outputs.version }}-beta.${{ github.run_number }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "channel=stable" >> $GITHUB_OUTPUT | |
| echo "docker_main_tag=latest" >> $GITHUB_OUTPUT | |
| echo "docker_version_tag=${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT | |
| echo "suffix=" >> $GITHUB_OUTPUT | |
| echo "prerelease=false" >> $GITHUB_OUTPUT | |
| echo "release_tag=v${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT | |
| echo "release_name=FilamentHub v${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT | |
| fi | |
| # ------------------------------------------------------------ | |
| # 4. Versionsvergleich (NUR stable) | |
| # ------------------------------------------------------------ | |
| - name: Read previous version from main | |
| if: ${{ steps.channel.outputs.channel == 'stable' }} | |
| id: oldversion | |
| run: | | |
| old_ver=$(git show origin/main:config.yaml | python -c "import sys, yaml; data=yaml.safe_load(sys.stdin.read()) or {}; app=data.get('app') or {}; print(app.get('version', ''))") | |
| echo "old=$old_ver" >> $GITHUB_OUTPUT | |
| - name: Check version change (stable only) | |
| if: ${{ steps.channel.outputs.channel == 'stable' }} | |
| id: version_changed | |
| run: | | |
| if [ "${{ steps.version.outputs.version }}" = "${{ steps.oldversion.outputs.old }}" ]; then | |
| echo "changed=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "changed=true" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Skip if no version bump (stable only) | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'false' }} | |
| run: | | |
| echo "Kein Versionssprung – Stable Build übersprungen." | |
| exit 0 | |
| # ------------------------------------------------------------ | |
| # 5. Git Tag (NUR stable) | |
| # ------------------------------------------------------------ | |
| - name: Create Git tag (stable only) | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| run: | | |
| git tag v${{ steps.version.outputs.version }} || echo "Tag existiert bereits" | |
| git push origin v${{ steps.version.outputs.version }} || true | |
| - name: Wait for tag propagation | |
| if: ${{ steps.channel.outputs.channel == 'beta' || (steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true') }} | |
| run: sleep 3 | |
| # ------------------------------------------------------------ | |
| # 6. Changelog DE (NUR stable) | |
| # ------------------------------------------------------------ | |
| - name: Generate Changelog (DE) | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| id: changelog_de | |
| uses: mikepenz/release-changelog-builder-action@v4 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Write CHANGELOG.md | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| run: echo "${{ steps.changelog_de.outputs.changelog }}" > CHANGELOG.md | |
| - name: Commit CHANGELOG.md | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| run: | | |
| git config user.name "github-actions" | |
| git config user.email "github-actions@github.com" | |
| git add CHANGELOG.md | |
| git commit -m "Update CHANGELOG for v${{ steps.version.outputs.version }}" || echo "No changes" | |
| - name: Push CHANGELOG.md | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| uses: ad-m/github-push-action@v0.8.0 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| # ------------------------------------------------------------ | |
| # 7. Changelog EN (NUR stable) | |
| # ------------------------------------------------------------ | |
| - name: Generate Changelog (EN) | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| id: changelog_en | |
| uses: mikepenz/release-changelog-builder-action@v4 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Write CHANGELOG_EN.md | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| run: echo "${{ steps.changelog_en.outputs.changelog }}" > CHANGELOG_EN.md | |
| - name: Commit CHANGELOG_EN.md | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| run: | | |
| git add CHANGELOG_EN.md | |
| git commit -m "Update CHANGELOG_EN for v${{ steps.version.outputs.version }}" || echo "No changes" | |
| - name: Push CHANGELOG_EN.md | |
| if: ${{ steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true' }} | |
| uses: ad-m/github-push-action@v0.8.0 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| # ------------------------------------------------------------ | |
| # 8. Docker Setup | |
| # ------------------------------------------------------------ | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # ------------------------------------------------------------ | |
| # 9. Docker Build & Push | |
| # ------------------------------------------------------------ | |
| - name: Build & Push Docker Image | |
| if: ${{ steps.channel.outputs.channel == 'beta' || (steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true') }} | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| push: true | |
| tags: d3nn3s/beta_test:latest | |
| # ------------------------------------------------------------ | |
| # 10. GitHub Release (stable + beta) | |
| # ------------------------------------------------------------ | |
| - name: Create GitHub Release | |
| if: ${{ steps.channel.outputs.channel == 'beta' || (steps.channel.outputs.channel == 'stable' && steps.version_changed.outputs.changed == 'true') }} | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ steps.channel.outputs.release_tag }} | |
| name: ${{ steps.channel.outputs.release_name }} | |
| prerelease: ${{ steps.channel.outputs.prerelease }} | |
| body: | | |
| ## 🇩🇪 Deutsch | |
| ${{ steps.changelog_de.outputs.changelog || 'Beta Release – kein finaler Changelog.' }} | |
| --- | |
| ## 🇬🇧 English | |
| ${{ steps.changelog_en.outputs.changelog || 'Beta release – no final changelog.' }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |