diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml new file mode 100644 index 0000000..244b35d --- /dev/null +++ b/.github/workflows/build-release.yml @@ -0,0 +1,131 @@ +name: Build and Release DeckTX + +on: + push: + branches: [ "main" ] + tags: [ '*' ] + pull_request: + branches: [ "main" ] + workflow_dispatch: + +jobs: + build-windows: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Set up CMake + uses: lukka/get-cmake@v3.27.1 + + - name: Set reusable strings + id: strings + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$env:GITHUB_ENV" + echo "install-dir=${{ github.workspace }}/install" >> "$env:GITHUB_ENV" + echo "artifact-name=decktx.zip" >> "$env:GITHUB_ENV" + + - name: Configure CMake + run: cmake -B ${{ env.build-output-dir }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${{ env.install-dir }} -S ${{ github.workspace }} + + - name: Build + run: cmake --build ${{ env.build-output-dir }} --config Release --target install + + - name: Zip install directory + run: powershell Compress-Archive -Path ${{ env.install-dir }}\* -DestinationPath ${{ env.github.workspace }}\${{ env.artifact-name }} + + - name: Package build artifacts + uses: actions/upload-artifact@v3 + with: + name: DeckTX-Windows + path: ${{ env.github.workspace }}\${{ env.artifact-name }} + + build-linux: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Set up Flatpak + run: | + sudo apt update + sudo apt install -y flatpak flatpak-builder + + - name: Add Flathub Remote + run: | + flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + + - name: Set reusable strings + id: strings + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_ENV" + echo "install-dir=${{ github.workspace }}/install" >> "$GITHUB_ENV" + echo "artifact-name=decktx.flatpak" >> "$GITHUB_ENV" + + - name: Build Flatpak + run: | + mkdir -p ${{ env.build-output-dir }}/flatpak-decktx + flatpak-builder --install-deps-from=flathub --force-clean --repo=repo ${{ env.build-output-dir }}/flatpak-decktx ${{ github.workspace }}/flatpak.json + flatpak build-bundle repo ${{ env.github.workspace }}/decktx.flatpak com.pixelyion.DeckTX + + - name: Package build artifacts + uses: actions/upload-artifact@v3 + with: + name: DeckTX-Linux + path: ${{ env.github.workspace }}/decktx.flatpak + + release: + runs-on: ubuntu-latest + needs: [build-windows, build-linux] + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + steps: + - uses: actions/checkout@v4 + + - name: Download Windows build artifacts + uses: actions/download-artifact@v3 + with: + name: DeckTX-Windows + path: ${{ github.workspace }} + + - name: Download Linux build artifacts + uses: actions/download-artifact@v3 + with: + name: DeckTX-Linux + path: ${{ github.workspace }} + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + body: | + Automatic release of DeckTX for tag ${{ github.ref }}. + draft: false + prerelease: false + + - name: Upload Release Asset (Windows) + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ github.workspace }}/decktx.zip + asset_name: decktx-windows.zip + asset_content_type: application/zip + + - name: Upload Release Asset (Linux) + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ github.workspace }}/decktx.flatpak + asset_name: decktx-linux.flatpak + asset_content_type: application/vnd.flatpak