.github: experimental workflow #1
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: | |
| push: | |
| branches: | |
| - main | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: ${{ github.repository }} | |
| jobs: | |
| build-appimage: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| arch: [x86_64, aarch64] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| if: matrix.arch == 'aarch64' | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: arm64 | |
| - name: Build AppImage (${{ matrix.arch }}) | |
| run: | | |
| if [ "${{ matrix.arch }}" = "aarch64" ]; then | |
| docker run --rm --platform linux/arm64 \ | |
| -v $PWD:/workspace -w /workspace \ | |
| --entrypoint /bin/bash \ | |
| ubuntu:22.04 -c ' | |
| apt-get update && \ | |
| apt-get install -y wget file libsdl2-dev libsdl2-ttf-dev \ | |
| libsdl2-image-dev libsdl2-mixer-dev build-essential && \ | |
| make clean && make && make appimage | |
| ' | |
| else | |
| sudo apt-get update | |
| sudo apt-get install -y libsdl2-dev libsdl2-ttf-dev \ | |
| libsdl2-image-dev libsdl2-mixer-dev | |
| make clean && make && make appimage | |
| fi | |
| - name: Rename AppImage | |
| run: | | |
| mv InfixDemo-x86_64.AppImage InfixDemo-${{ matrix.arch }}.AppImage || true | |
| - name: Upload AppImage artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: appimage-${{ matrix.arch }} | |
| path: InfixDemo-${{ matrix.arch }}.AppImage | |
| build-docker: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| strategy: | |
| matrix: | |
| platform: [linux/amd64, linux/arm64] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
| tags: | | |
| type=raw,value=latest | |
| type=sha,prefix={{branch}}- | |
| - name: Build and push Docker image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| platforms: ${{ matrix.platform }} | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| release: | |
| needs: [build-appimage] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Display structure of downloaded files | |
| run: ls -R artifacts | |
| - name: Create/Update Release | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| tag: latest | |
| name: Latest Build | |
| body: | | |
| Automated build of Infix Demo | |
| **AppImages:** | |
| - `InfixDemo-x86_64.AppImage` - x86_64 build | |
| - `InfixDemo-aarch64.AppImage` - ARM64 build | |
| **Docker images:** | |
| - `ghcr.io/${{ github.repository }}:latest` | |
| Built from commit: ${{ github.sha }} | |
| artifacts: "artifacts/**/*.AppImage" | |
| allowUpdates: true | |
| removeArtifacts: true | |
| makeLatest: true | |
| token: ${{ secrets.GITHUB_TOKEN }} |