Create rolling release #3503
Workflow file for this run
This file contains 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: Create rolling release | |
on: | |
pull_request: | |
paths-ignore: | |
- '**.md' | |
- 'appveyor.yml' | |
- 'scripts/*' | |
- '.github/ISSUE_TEMPLATE/*' | |
push: | |
branches: | |
- master | |
- dev | |
paths-ignore: | |
- '**.md' | |
- 'appveyor.yml' | |
- 'scripts/*' | |
- '.github/ISSUE_TEMPLATE/*' | |
workflow_dispatch: | |
jobs: | |
windows-build: | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: Cache Dependencies | |
id: cache-deps | |
uses: actions/cache@v3 | |
with: | |
path: | | |
dep/msvc/deps-arm64 | |
dep/msvc/deps-x64 | |
key: deps ${{ hashFiles('scripts/build-dependencies-windows-arm64.bat', 'scripts/build-dependencies-windows-x64.bat') }} | |
- name: Build X64 Dependencies | |
if: steps.cache-deps.outputs.cache-hit != 'true' | |
env: | |
DEBUG: 0 | |
run: scripts/build-dependencies-windows-x64.bat | |
- name: Build ARM64 Dependencies | |
if: steps.cache-deps.outputs.cache-hit != 'true' | |
env: | |
DEBUG: 0 | |
run: scripts/build-dependencies-windows-arm64.bat | |
- name: Tag as preview build | |
if: github.ref == 'refs/heads/master' | |
shell: cmd | |
run: | | |
echo #pragma once > src/scmversion/tag.h | |
echo #define SCM_RELEASE_ASSET "duckstation-windows-x64-release.zip" >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAG "preview" >> src/scmversion/tag.h | |
- name: Tag as dev build | |
if: github.ref == 'refs/heads/dev' | |
shell: cmd | |
run: | | |
echo #pragma once > src/scmversion/tag.h | |
echo #define SCM_RELEASE_ASSET "duckstation-windows-x64-release.zip" >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAG "latest" >> src/scmversion/tag.h | |
- name: Update RC version fields | |
shell: cmd | |
run: | | |
cd src\scmversion | |
call update_rc_version.bat | |
cd ..\.. | |
git update-index --assume-unchanged src/duckstation-qt/duckstation-qt.rc | |
git update-index --assume-unchanged src/duckstation-nogui/duckstation-nogui.rc | |
- name: Compile x64 release build | |
shell: cmd | |
run: | | |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 | |
msbuild duckstation.sln -t:Build -p:Platform=x64;Configuration=ReleaseLTCG | |
- name: Create x64 symbols archive | |
shell: cmd | |
run: | | |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-release-symbols.zip ./bin/x64/*.pdb | |
- name: Upload x64 release symbols artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "windows" | |
path: "duckstation-windows-x64-release-symbols.zip" | |
- name: Remove extra bloat before archiving | |
shell: cmd | |
run: | | |
del /Q bin\x64\*.pdb bin\x64\*.exp bin\x64\*.lib bin\x64\*.iobj bin\x64\*.ipdb bin\x64\common-tests* | |
rename bin\x64\updater-x64-ReleaseLTCG.exe updater.exe | |
- name: Create x64 release archive | |
shell: cmd | |
run: | | |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-release.zip ./bin/x64/* | |
- name: Upload x64 release artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "windows" | |
path: "duckstation-windows-x64-release.zip" | |
windows-arm64-build: | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
submodules: true | |
- name: Cache Dependencies | |
id: cache-deps | |
uses: actions/cache@v3 | |
with: | |
path: | | |
dep/msvc/deps-arm64 | |
dep/msvc/deps-x64 | |
key: deps ${{ hashFiles('scripts/build-dependencies-windows-arm64.bat', 'scripts/build-dependencies-windows-x64.bat') }} | |
- name: Build X64 Dependencies | |
if: steps.cache-deps.outputs.cache-hit != 'true' | |
env: | |
DEBUG: 0 | |
run: scripts/build-dependencies-windows-x64.bat | |
- name: Build ARM64 Dependencies | |
if: steps.cache-deps.outputs.cache-hit != 'true' | |
env: | |
DEBUG: 0 | |
run: scripts/build-dependencies-windows-arm64.bat | |
- name: Tag as preview build | |
if: github.ref == 'refs/heads/master' | |
shell: cmd | |
run: | | |
echo #pragma once > src/scmversion/tag.h | |
echo #define SCM_RELEASE_ASSET "duckstation-windows-arm64-release.zip" >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAG "preview" >> src/scmversion/tag.h | |
- name: Tag as dev build | |
if: github.ref == 'refs/heads/dev' | |
shell: cmd | |
run: | | |
echo #pragma once > src/scmversion/tag.h | |
echo #define SCM_RELEASE_ASSET "duckstation-windows-arm64-release.zip" >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h | |
echo #define SCM_RELEASE_TAG "latest" >> src/scmversion/tag.h | |
- name: Update RC version fields | |
shell: cmd | |
run: | | |
cd src\scmversion | |
call update_rc_version.bat | |
cd ..\.. | |
git update-index --assume-unchanged src/duckstation-qt/duckstation-qt.rc | |
git update-index --assume-unchanged src/duckstation-nogui/duckstation-nogui.rc | |
- name: Compile arm64 release build | |
shell: cmd | |
run: | | |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64 | |
msbuild duckstation.sln -t:Build -p:Platform=ARM64;Configuration=ReleaseLTCG | |
- name: Create arm64 symbols archive | |
shell: cmd | |
run: | | |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-arm64-release-symbols.zip ./bin/ARM64/*.pdb | |
- name: Upload arm64 release symbols artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "windows-arm64" | |
path: "duckstation-windows-arm64-release-symbols.zip" | |
- name: Remove extra bloat before archiving | |
shell: cmd | |
run: | | |
del /Q bin\ARM64\*.pdb bin\ARM64\*.exp bin\ARM64\*.lib bin\ARM64\*.iobj bin\ARM64\*.ipdb bin\ARM64\common-tests* | |
rename bin\ARM64\updater-ARM64-ReleaseLTCG.exe updater.exe | |
- name: Create arm64 release archive | |
shell: cmd | |
run: | | |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-arm64-release.zip ./bin/ARM64/* | |
- name: Upload arm64 release artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "windows-arm64" | |
path: "duckstation-windows-arm64-release.zip" | |
linux-build: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: Install packages | |
shell: bash | |
run: | | |
# Workaround for https://github.com/actions/runner-images/issues/675 | |
# TODO: Update to LLVM 18 | |
sudo scripts/retry.sh apt-get update && | |
sudo scripts/retry.sh apt-get -y install \ | |
cmake ninja-build ccache libegl1-mesa-dev libevdev-dev libwayland-dev libwayland-egl-backend-dev libxrandr-dev libdbus-1-dev \ | |
extra-cmake-modules libcurl4-openssl-dev libssl-dev libasound2-dev libpulse-dev libx11-xcb-dev build-essential git libclang-dev \ | |
libclang-11-dev libclang-12-dev patchelf libglib2.0-dev libfontconfig1-dev libharfbuzz-dev libjpeg-dev libpng-dev libfreetype-dev \ | |
libinput-dev libxcb-*-dev libxkbcommon-dev libxkbcommon-x11-dev libxrender-dev libwayland-dev libgl1-mesa-dev libegl-dev \ | |
libegl1-mesa-dev libgl1-mesa-dev libssl-dev libx11-dev libx11-xcb-dev llvm-12 lld-12 clang-12 | |
- name: Cache Dependencies | |
id: cache-deps | |
uses: actions/cache@v3 | |
with: | |
path: ~/deps | |
key: deps ${{ hashFiles('scripts/build-dependencies.sh') }} | |
- name: Build Dependencies | |
if: steps.cache-deps.outputs.cache-hit != 'true' | |
run: scripts/build-dependencies.sh | |
- name: Compile build | |
shell: bash | |
run: | | |
mkdir build | |
cd build | |
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_NOGUI_FRONTEND=OFF -DBUILD_QT_FRONTEND=ON -DBUILD_TESTS=OFF -DUSE_EGL=ON -DUSE_SDL2=ON -DUSE_WAYLAND=ON -DUSE_X11=ON -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH=$HOME/deps -DCMAKE_TOOLCHAIN_FILE=../scripts/clang-toolchain.cmake .. | |
cmake --build . --parallel | |
cd .. | |
scripts/make-appimage.sh $(realpath ./build) $(realpath .) $HOME/deps DuckStation-x64 | |
- name: Upload Qt AppImage | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "linux-x64-appimage-qt" | |
path: "DuckStation-x64.AppImage" | |
linux-flatpak-build: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install packages | |
shell: bash | |
run: scripts/flatpak/install-packages.sh | |
- name: Generate AppStream XML | |
run: | | |
scripts/flatpak/generate-metainfo.sh scripts/flatpak/org.duckstation.duckstation.metainfo.xml | |
cat scripts/flatpak/org.duckstation.duckstation.metainfo.xml | |
flatpak run org.freedesktop.appstream-glib validate scripts/flatpak/org.duckstation.duckstation.metainfo.xml | |
- name: Build Flatpak | |
uses: flatpak/flatpak-github-actions/[email protected] | |
with: | |
bundle: duckstation-x64.flatpak | |
manifest-path: scripts/flatpak/org.duckstation.duckstation.json | |
arch: x86_64 | |
build-bundle: true | |
verbose: true | |
#mirror-screenshots-url: https://dl.flathub.org/repo/screenshots | |
#branch: ${{ inputs.branch }} | |
branch: master | |
cache: true | |
restore-cache: true | |
cache-key: flatpak-x64-${{ hashFiles('.scripts/flatpak/**/*.json') }} | |
# - name: Commit screenshots to OSTree | |
# run: | | |
# ostree commit --repo=repo --canonical-permissions --branch=screenshots/x86_64 flatpak_app/screenshots | |
- name: Upload Flatpak | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "linux-flatpak" | |
path: "duckstation-x64.flatpak" | |
macos-build: | |
runs-on: macos-11 | |
steps: | |
- uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: Install packages | |
shell: bash | |
run: | | |
brew install curl ninja | |
- name: Cache Dependencies | |
id: cache-deps-mac | |
uses: actions/cache@v3 | |
with: | |
path: ~/deps | |
key: deps-mac ${{ hashFiles('scripts/build-dependencies-mac.sh') }} | |
- name: Build Dependencies | |
if: steps.cache-deps-mac.outputs.cache-hit != 'true' | |
run: scripts/build-dependencies-mac.sh | |
- name: Compile and zip .app | |
shell: bash | |
run: | | |
mkdir build | |
cd build | |
../scripts/make-universal-macos-binary.sh .. | |
zip -r duckstation-mac-release.zip DuckStation.app/ | |
- name: Upload macOS .app | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "macos" | |
path: "build/duckstation-mac-release.zip" | |
create-release: | |
needs: [windows-build, windows-arm64-build, linux-build, linux-flatpak-build, macos-build] | |
runs-on: "ubuntu-20.04" | |
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' | |
steps: | |
- name: Download Windows Artifacts | |
uses: actions/download-artifact@v1 | |
with: | |
name: "windows" | |
- name: Download Windows ARM64 Artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: "windows-arm64" | |
- name: Download Qt AppImage Artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: "linux-x64-appimage-qt" | |
- name: Download Flatpak Artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: "linux-flatpak" | |
- name: Download MacOS Artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: "macos" | |
- name: Create preview release | |
if: github.ref == 'refs/heads/master' | |
uses: "marvinpinto/action-automatic-releases@latest" | |
with: | |
repo_token: "${{ secrets.GITHUB_TOKEN }}" | |
automatic_release_tag: "preview" | |
prerelease: true | |
title: "Latest Preview Build" | |
files: | | |
windows/duckstation-windows-x64-release.zip | |
windows/duckstation-windows-x64-release-symbols.zip | |
windows-arm64/duckstation-windows-arm64-release.zip | |
windows-arm64/duckstation-windows-arm64-release-symbols.zip | |
linux-x64-appimage-qt/DuckStation-x64.AppImage | |
linux-flatpak/duckstation-x64.flatpak | |
macos/duckstation-mac-release.zip | |
- name: Create dev release | |
if: github.ref == 'refs/heads/dev' | |
uses: "marvinpinto/action-automatic-releases@latest" | |
with: | |
repo_token: "${{ secrets.GITHUB_TOKEN }}" | |
automatic_release_tag: "latest" | |
prerelease: false | |
title: "Latest Rolling Release" | |
files: | | |
windows/duckstation-windows-x64-release.zip | |
windows/duckstation-windows-x64-release-symbols.zip | |
windows-arm64/duckstation-windows-arm64-release.zip | |
windows-arm64/duckstation-windows-arm64-release-symbols.zip | |
linux-x64-appimage-qt/DuckStation-x64.AppImage | |
linux-flatpak/duckstation-x64.flatpak | |
macos/duckstation-mac-release.zip | |