Skip to content

Commit

Permalink
actions: Add workflow for building Windows/Linux packages
Browse files Browse the repository at this point in the history
Add a GitHub Actions workflow that does MSVC builds for Windows packaged
into a zip and GCC builds for Linux packaged using Flatpak deployed as
artifacts. It also supports creating a release with the packages.
  • Loading branch information
PixelyIon committed Jul 31, 2024
1 parent ea08ad1 commit 98ac893
Showing 1 changed file with 169 additions and 0 deletions.
169 changes: 169 additions & 0 deletions .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
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/[email protected]

- name: Set environment variables
id: strings
run: |
echo "build-dir=${{ github.workspace }}/build" >> "$env:GITHUB_ENV"
echo "install-dir=${{ github.workspace }}/install" >> "$env:GITHUB_ENV"
- name: Configure CMake
run: cmake -B ${{ env.build-dir }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${{ env.install-dir }} -S ${{ github.workspace }}

- name: Build
run: cmake --build ${{ env.build-dir }} --config Release --target install

- name: Package build artifacts
uses: actions/upload-artifact@v3
with:
name: DeckTX-Windows
path: ${{ env.install-dir }}

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: |
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- name: Set environment variables
id: strings
run: |
echo "build-dir=${{ github.workspace }}/build" >> "$GITHUB_ENV"
echo "flatpak-json=${{ github.workspace }}/flatpak.json" >> "$GITHUB_ENV"
echo "flatpak-file=${{ github.workspace }}/decktx.flatpak" >> "$GITHUB_ENV"
- name: Allow file protocol in Git
run: git config --global protocol.file.allow always

- name: Generate Flatpak manifest
run: |
cat > ${{ env.flatpak-json }} <<EOL
{
"id": "com.pixelyion.DeckTX",
"runtime": "org.freedesktop.Platform",
"runtime-version": "23.08",
"sdk": "org.freedesktop.Sdk",
"command": "/app/DeckTX",
"modules": [
{
"name": "DeckTX",
"buildsystem": "cmake",
"config-opts": [
"-DCMAKE_BUILD_TYPE=Release"
],
"build-options": {
"build-args": [ "--share=network" ]
},
"sources": [
{
"type": "dir",
"path": "."
}
]
}
],
"finish-args": [
"--share=network",
"--share=ipc",
"--device=dri",
"--socket=x11",
"--socket=wayland",
"--device=all",
"--extension=org.freedesktop.Platform.GL.default",
]
}
EOL
- name: Build Flatpak
run: |
mkdir -p ${{ env.build-dir }}/flatpak-decktx
sudo flatpak-builder --install-deps-from=flathub --force-clean --repo=repo ${{ env.build-dir }}/flatpak-decktx ${{ env.flatpak-json }}
flatpak build-bundle repo ${{ env.flatpak-file }} com.pixelyion.DeckTX
- name: Package build artifacts
uses: actions/upload-artifact@v3
with:
name: DeckTX-Linux
path: ${{ env.flatpak-file }}

release:
runs-on: ubuntu-latest
needs: [build-windows, build-linux]
if: (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) || github.event_name == 'workflow_dispatch'
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 }}/install
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

0 comments on commit 98ac893

Please sign in to comment.