Skip to content

Release Assets

Release Assets #15

Workflow file for this run

name: Release Assets
on:
release:
types:
- published
workflow_dispatch:
inputs:
tag_name:
description: "Existing tag to publish assets for (for example, v1.0.0)"
required: true
release_name:
description: "Release name used when creating or updating a release manually"
required: true
body:
description: "Optional release notes for manual publishing"
required: false
permissions:
contents: write
env:
CLIENT_NAME: BestClient
jobs:
build-cmake:
name: Build Release (${{ matrix.name }})
runs-on: ${{ matrix.os }}
env:
CARGO_HTTP_MULTIPLEXING: false
strategy:
fail-fast: false
matrix:
include:
- name: linux
os: ubuntu-24.04
cmake-args: -G Ninja -DPREFER_BUNDLED_LIBS=ON -DDISCORD_DYNAMIC=ON
cmake-init-env: CXXFLAGS="-Werror -Wno-unused-function"
package-file: "*-linux_x86_64.tar.xz"
artifact-name: release-linux
asset-name: BestClient-linux.tar.xz
- name: windows
os: windows-latest
cmake-args: -A x64 -DEXCEPTION_HANDLING=ON -DVULKAN=ON
cmake-init-env: CXXFLAGS=/WX LDFLAGS="/WX /IGNORE:4098"
package-file: "*-win64.zip"
artifact-name: release-windows
asset-name: BestClient-windows.zip
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Prepare Linux
if: contains(matrix.os, 'ubuntu')
run: |
sudo apt-get update -y
sudo apt-get install pkg-config ninja-build libcurl4-openssl-dev libfreetype6-dev libnotify-dev libogg-dev libopus-dev libopusfile-dev libsdl2-dev libsqlite3-dev libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libx264-dev libpng-dev libvulkan-dev libglew-dev -y
- name: Install Vulkan SDK
uses: humbletim/install-vulkan-sdk@v1.2
with:
version: 1.3.296.0
cache: true
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: |
./
- name: Package release build
run: |
mkdir release
cd release
cmake -E env ${{ matrix.cmake-init-env }} cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Release -Werror=dev ..
cmake --build . --config Release --target package_default
mkdir artifacts
mv ${{ matrix.package-file }} artifacts/${{ matrix.asset-name }}
- name: Upload release package
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact-name }}
path: release/artifacts/${{ matrix.asset-name }}
build-android:
name: Build Release (android)
runs-on: ubuntu-24.04
env:
CARGO_HTTP_MULTIPLEXING: false
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Prepare Linux
run: |
sudo apt-get update -y
sudo apt-get install ninja-build openjdk-21-jdk openssl
curl -LO https://github.com/Kitware/CMake/releases/download/v3.22.1/cmake-3.22.1-Linux-x86_64.tar.gz
mkdir -p /home/runner/cmake
tar --strip-components 1 -C /home/runner/cmake -xf cmake-3.22.1-Linux-x86_64.tar.gz
rustup default 1.92.0
cargo install cargo-ndk
rustup target add armv7-linux-androideabi
rustup target add i686-linux-android
rustup target add aarch64-linux-android
rustup target add x86_64-linux-android
scripts/android/download_android_sdk.sh /home/runner
- name: Install Vulkan SDK
uses: humbletim/install-vulkan-sdk@v1.2
with:
version: 1.3.296.0
cache: true
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
with:
workspaces: |
./
- name: Build Android app
env:
TW_KEY_NAME: /home/runner/DDNet.jks
TW_KEY_ALIAS: DDNet-Key
run: |
export TW_KEY_PW="$(openssl rand -base64 32)"
keytool -genkey -v -keystore "$TW_KEY_NAME" -keyalg RSA -keysize 2048 -validity 10000 -alias "$TW_KEY_ALIAS" -storepass "$TW_KEY_PW" -dname "CN=DDNet CI, OU=DDNet, O=DDNet"
export ANDROID_HOME="/home/runner/Android/Sdk"
unset ANDROID_SDK_ROOT
export PATH=/home/runner/cmake/bin:$PATH
scripts/android/cmake_android.sh all DDNet org.ddnet.client Release build-android
mkdir artifacts
mv build-android/DDNet.apk artifacts/${{ env.CLIENT_NAME }}-android.apk
- name: Upload Android package
uses: actions/upload-artifact@v4
with:
name: release-android
path: artifacts/${{ env.CLIENT_NAME }}-android.apk
publish:
name: Publish Release Assets
needs:
- build-cmake
- build-android
runs-on: ubuntu-latest
steps:
- name: Download release packages
uses: actions/download-artifact@v4
with:
pattern: release-*
path: artifacts
merge-multiple: true
- name: List downloaded release packages
run: ls -R artifacts
- name: Attach assets to published GitHub release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.release.tag_name }}
files: |
artifacts/${{ env.CLIENT_NAME }}-linux.tar.xz
artifacts/${{ env.CLIENT_NAME }}-windows.zip
artifacts/${{ env.CLIENT_NAME }}-android.apk
- name: Create or update release manually
if: github.event_name == 'workflow_dispatch'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag_name }}
name: ${{ github.event.inputs.release_name }}
body: ${{ github.event.inputs.body }}
files: |
artifacts/${{ env.CLIENT_NAME }}-linux.tar.xz
artifacts/${{ env.CLIENT_NAME }}-windows.zip
artifacts/${{ env.CLIENT_NAME }}-android.apk