Skip to content

actions: Add GitHub Actions pipeline for building and releasing #7

actions: Add GitHub Actions pipeline for building and releasing

actions: Add GitHub Actions pipeline for building and releasing #7

Workflow file for this run

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" >> "$env:GITHUB_ENV"
echo "flatpak-json=${{ github.workspace }}/flatpak.json" >> "$env:GITHUB_ENV"
echo "flatpak-file=${{ github.workspace }}/decktx.flatpak" >> "$env: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": "DeckTX",
"modules": [
{
"name": "DeckTX",
"buildsystem": "cmake",
"config-opts": [
"-DCMAKE_BUILD_TYPE=Release"
],
"sources": [
{
"type": "git",
"url": "https://github.com/${{ github.repository }}.git",
"commit": "${{ github.sha }}",
"submodules": true
}
]
}
],
"finish-args": [
"--share=network",
"--share=ipc",
"--device=dri",
"--socket=x11",
"--socket=wayland",
"--env=DISPLAY",
"--env=XDG_RUNTIME_DIR",
"--device=all",
"--env=LD_LIBRARY_PATH=/app/lib:/app/lib64:/usr/lib:/usr/lib64",
"--extension=org.freedesktop.Platform.GL.default",
"--env=VK_ICD_FILENAMES=/usr/share/vulkan/icd.d:/app/share/vulkan/icd.d"
]
}
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/')
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