New Crowdin updates (#797) #6657
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
# Builds on all branches & PRs and packages for MacOS and Windows. | |
# Deploys to PyPi for tags. | |
name: Build, test and publish | |
on: | |
push: | |
branches: | |
- master | |
- release | |
- version/* | |
pull_request: | |
branches-ignore: | |
- l10n_master | |
create: | |
tags: | |
- '*' | |
jobs: | |
typechecks: | |
runs-on: ubuntu-latest | |
name: Type checks | |
strategy: | |
max-parallel: 5 | |
matrix: | |
python-version: [ "3.9", "3.10", "3.11", "3.12" ] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: theCapypara/mypy-check@rust-support | |
name: Run type checks | |
with: | |
mypy_flags: '--config-file mypy.ini' | |
requirements: '-r requirements-dev.txt' | |
python_version: '${{ matrix.python-version }}' | |
linting: | |
runs-on: ubuntu-latest | |
name: Linting | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install gobject-introspection | |
run: sudo apt-get install -y gobject-introspection libgirepository1.0-dev | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements-dev.txt | |
- name: Lint with ruff | |
run: ruff check --output-format=github skytemple | |
code-formatting: | |
runs-on: ubuntu-latest | |
name: Code Format | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install ruff | |
run: | | |
python -m pip install --upgrade pip | |
pip install ruff | |
- name: Check with ruff | |
run: ruff format --check skytemple | |
build: | |
runs-on: ubuntu-latest | |
name: Build the Python wheel | |
steps: | |
# For tags we assume the version in pyproject.toml is correct! | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Rewrite version for dev if not tag | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
run: | | |
perl -i -pe "s/version\s*=\s*\"(.*?)(\.rc.*|\.a.*|\.post.*)?\"/version=\"\1.dev0+${GITHUB_SHA::8}\"/" pyproject.toml | |
- name: Note version | |
run: | | |
echo "PACKAGE_VERSION=$(tomlq '.project.version' pyproject.toml -r)" >> $GITHUB_ENV | |
- name: Build localization MO files | |
run: | | |
installer/generate-mo.sh | |
- name: Build wheels | |
run: | | |
python3 -m pip install --upgrade pip build | |
python3 -m build | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheels | |
path: dist/*.whl | |
deploy: | |
if: startsWith(github.ref, 'refs/tags/') | |
needs: | |
- build | |
- package-windows | |
- package-mac | |
- package-mac-arm64 | |
- package-linux-flatpak-stable | |
runs-on: ubuntu-latest | |
name: Deploy wheels to PyPI | |
steps: | |
- name: Download wheels | |
uses: actions/download-artifact@v4 | |
with: | |
name: wheels | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
- name: Upgrade pip | |
run: | | |
python -m pip install --upgrade pip | |
pip install twine | |
- name: Publish wheels to PyPI | |
env: | |
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} | |
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | |
run: | | |
twine upload *.whl | |
deploy-to-artifact-storage: | |
runs-on: [ self-hosted, artifact-storage ] | |
name: Upload artifacts | |
needs: | |
- build | |
- package-windows | |
- package-mac | |
- package-mac-arm64 | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.ref }}" | |
steps: | |
- name: Clear | |
run: | | |
rm -rf "${{ github.workspace }}/artifacts" || true | |
mkdir -p "${{ github.workspace }}/artifacts" | |
- name: Download wheels | |
id: artifact_wheel | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/whl | |
name: wheels | |
- name: Download Windows | |
id: artifact_windows | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/win | |
name: skytemple-windows-app-x64 | |
- name: Download MacOS Intel | |
id: artifact_macos_x86 | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/mac_x86 | |
name: skytemple-mac-dmg-x86_64 | |
- name: Download MacOS ARM | |
id: artifact_macos_arm64 | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/mac_arm64 | |
name: skytemple-mac-dmg-arm64 | |
- name: Copy over distributions | |
run: | | |
# Replace / in PR refs (123/merge -> 123-merge) | |
REF=${GITHUB_REF_NAME/\//-} | |
PATH_WHEEL=$(eval echo "${{ steps.artifact_wheel.outputs.download-path }}/*.whl") | |
PATH_WIN=$(eval echo "${{ steps.artifact_windows.outputs.download-path }}/*.exe") | |
PATH_MACOS=$(eval echo "${{ steps.artifact_macos_x86.outputs.download-path }}/*.dmg") | |
PATH_MACOS_ARM=$(eval echo "${{ steps.artifact_macos_arm64.outputs.download-path }}/*.dmg") | |
mkdir -p /mnt/dist/skytemple | |
cp -f "$PATH_WHEEL" "/mnt/dist/skytemple/skytemple-$REF.whl" | |
cp -f "$PATH_WIN" "/mnt/dist/skytemple/skytemple-$REF.exe" | |
cp -f "$PATH_MACOS" "/mnt/dist/skytemple/skytemple-x86-$REF.dmg" | |
cp -f "$PATH_MACOS_ARM" "/mnt/dist/skytemple/skytemple-arm64-$REF.dmg" | |
deploy-to-skytemple-dist: | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: [ self-hosted, skytemple-dist ] | |
name: Upload to Deposit Box | |
needs: | |
- build | |
- package-windows | |
- package-mac | |
- package-mac-arm64 | |
steps: | |
- name: Clear | |
run: | | |
rm -rf "${{ github.workspace }}/artifacts" || true | |
mkdir -p "${{ github.workspace }}/artifacts" | |
- name: Download Windows | |
id: artifact_windows | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/win | |
name: skytemple-windows-app-x64 | |
- name: Download MacOS Intel | |
id: artifact_macos_x86 | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/mac_x86 | |
name: skytemple-mac-dmg-x86_64 | |
- name: Download MacOS ARM | |
id: artifact_macos_arm64 | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts/mac_arm64 | |
name: skytemple-mac-dmg-arm64 | |
- name: Copy over distributions | |
run: | | |
PATH_WIN=$(eval echo "${{ steps.artifact_windows.outputs.download-path }}/*.exe") | |
PATH_MACOS=$(eval echo "${{ steps.artifact_macos_x86.outputs.download-path }}/*.dmg") | |
PATH_MACOS_ARM=$(eval echo "${{ steps.artifact_macos_arm64.outputs.download-path }}/*.dmg") | |
dist.py "$PATH_WIN" "skytemple/$GITHUB_REF_NAME/skytemple-$GITHUB_REF_NAME-win-install.exe" | |
dist.py "$PATH_MACOS" "skytemple/$GITHUB_REF_NAME/skytemple-$GITHUB_REF_NAME-mac-install-x86-64.dmg" | |
dist.py "$PATH_MACOS_ARM" "skytemple/$GITHUB_REF_NAME/skytemple-$GITHUB_REF_NAME-mac-install-arm64.dmg" | |
package-linux-flatpak-nightly: | |
name: Linux Flatpak Nightly | |
runs-on: ubuntu-latest | |
container: | |
image: bilelmoussaoui/flatpak-github-actions:gnome-46 | |
options: --privileged | |
steps: | |
# Most of these are needed because of a bug in pip download, which causes pip download to attempt to build all build dependencies.. | |
- name: Install dependencies | |
run: | | |
sudo yum install -y perl python3 python3-pip python3-devel gobject-introspection-devel meson cmake pkg-config cairo-devel cairo-gobject-devel make automake gcc gcc-c++ | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install generator dependencies | |
run: | | |
pip3 install -r installer/linux-flatpak/requirements.txt | |
- name: Rewrite version for dev if not tag | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
run: | | |
perl -i -pe "s/version\s*=\s*\"(.*?)(\.rc.*|\.a.*|\.post.*)?\"/version=\"\1.dev0+${GITHUB_SHA::8}\"/" pyproject.toml | |
- name: Run generator | |
run: | | |
python3 -u installer/linux-flatpak/generator.py nightly | |
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6 | |
name: Build Flatpak | |
with: | |
bundle: org.skytemple.SkyTemple.flatpak | |
manifest-path: installer/linux-flatpak/org.skytemple.SkyTemple.yml | |
cache-key: flatpak-builder-${{ github.sha }} | |
- uses: flatpak/flatpak-github-actions/flat-manager@v6 | |
name: Deploy to SkyTemple Repo | |
if: github.ref == 'refs/heads/master' | |
with: | |
repository: nightly | |
flat-manager-url: https://flatpak.skytemple.org/ | |
token: ${{ secrets.SKYTEMPLE_FLATPAK_REPO_TOKEN }} | |
package-linux-flatpak-stable: | |
if: startsWith(github.ref, 'refs/tags/') | |
name: Linux Flatpak Stable | |
runs-on: ubuntu-latest | |
container: | |
image: bilelmoussaoui/flatpak-github-actions:gnome-46 | |
options: --privileged | |
steps: | |
# Most of these are needed because of a bug in pip download, which causes pip download to attempt to build all build dependencies.. | |
- name: Install dependencies | |
run: | | |
sudo yum install -y python3 python3-pip python3-devel jq gobject-introspection-devel meson cmake pkg-config cairo-devel cairo-gobject-devel make automake gcc gcc-c++ | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install generator dependencies | |
run: | | |
pip3 install -r installer/linux-flatpak/requirements.txt tomlq | |
- name: Note version | |
run: | | |
echo "PACKAGE_VERSION=$(tomlq '.project.version' pyproject.toml -r)" >> $GITHUB_ENV | |
- name: Run generator | |
run: | | |
python3 -u installer/linux-flatpak/generator.py stable | |
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6 | |
name: Build Flatpak | |
with: | |
bundle: org.skytemple.SkyTemple.flatpak | |
manifest-path: installer/linux-flatpak/stable/org.skytemple.SkyTemple.yml | |
- name: Checkout Flathub GH Repo | |
uses: actions/checkout@v4 | |
with: | |
repository: flathub/org.skytemple.SkyTemple | |
path: flathub | |
token: ${{ secrets.FLATHUB_GITHUB_TOKEN }} | |
- name: Delete all old files | |
run: | | |
git rm -rf . | |
git clean -fxd | |
working-directory: flathub | |
- name: Copy stable build to FlatHub Repo | |
run: | | |
cp -a installer/linux-flatpak/stable/. flathub/ | |
- name: Create Pull Request | |
uses: peter-evans/create-pull-request@v6 | |
with: | |
add-paths: . | |
title: New Release ${{ env.PACKAGE_VERSION }} | |
body: Autogenerated by ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
commit-message: New Release ${{ env.PACKAGE_VERSION }} | |
path: flathub | |
token: ${{ secrets.FLATHUB_GITHUB_TOKEN }} | |
branch: release/${{ env.PACKAGE_VERSION }} | |
delete-branch: true | |
package-windows: | |
# This is partly based on https://github.com/wingtk/gvsbuild/blob/main/.github/workflows/ci.yml | |
runs-on: windows-2022 | |
name: Build and package for Windows | |
steps: | |
- name: Setup python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
architecture: "x64" | |
- name: Cache GTK-Build | |
id: cache-gtk-build | |
uses: actions/cache@v4 | |
with: | |
path: "C:\\gtk-build" | |
key: win-gtk-build-2024-fork1-1 | |
restore-keys: | | |
win-gtk-build-2023-fork1-1- | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# Temporarily move the preinstalled git, it causes errors related to cygwin. | |
- name: Move git binary | |
run: | | |
Move-Item "C:\Program Files\Git\usr\bin" "C:\Program Files\Git\usr\notbin" | |
Move-Item "C:\Program Files\Git\bin" "C:\Program Files\Git\notbin" | |
- name: Install gvsbuild | |
run: | | |
# gvsbuild has issues if the pipx install path has spaces in it. It may be installed | |
# in Program Files (x86) by default, so let's just make sure it isn't. | |
if (Test-Path "C:\Program Files (x86)\pipx") { | |
Remove-Item -path "C:\Program Files (x86)\pipx" -recurse | |
} | |
# Make sure the pipx venv dir has no spaces | |
New-Item -ItemType Directory -Force -Path C:\pipx_home | |
$env:PIPX_HOME = "C:\pipx_home" | |
echo "PIPX_HOME=C:\pipx_home" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
New-Item -ItemType Directory -Force -Path C:\pipx_bin | |
$env:PIPX_BIN_DIR = "C:\pipx_bin" | |
echo "PIPX_BIN_DIR=C:\pipx_bin" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
$env:path = "C:\pipx_bin;" + $env:path | |
python -m pip install --user pipx | |
python -m pipx ensurepath | |
pipx install "git+https://github.com/theCapypara/gvsbuild@pango-patch" | |
- name: Build GTK and other libs | |
run: | | |
$env:path = "C:\pipx_bin;" + $env:path | |
gvsbuild build --fast-build --ninja-opts -j2 --enable-gi --py-wheel gtk3 pygobject openssl gettext gtksourceview4 hicolor-icon-theme adwaita-icon-theme | |
- name: Restore git binary | |
run: | | |
Move-Item "C:\Program Files\Git\usr\notbin" "C:\Program Files\Git\usr\bin" | |
Move-Item "C:\Program Files\Git\notbin" "C:\Program Files\Git\bin" | |
- name: Rewrite version for dev if not tag | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
shell: sh | |
run: | | |
perl -i -pe "s/version\s*=\s*\"(.*?)(\.rc.*|\.a.*|\.post.*)?\"/version=\"\1.dev0+${GITHUB_SHA::8}\"/" pyproject.toml | |
echo "IS_DEV_BUILD=1" >> $GITHUB_ENV | |
- name: Note version | |
run: | | |
$env:path = "C:\pipx_bin;" + $env:path | |
pipx install yq | |
$env:PACKAGE_VERSION = tomlq.exe '.project.version' pyproject.toml -r | |
echo "PACKAGE_VERSION=$env:PACKAGE_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
- name: Install SkyTemple | |
run: | | |
$ErrorActionPreference = "Stop" | |
$env:pathext = $env:pathext + ";.PY" | |
$env:path = "C:\gtk-build\gtk\x64\release\bin;" + $env:path | |
$env:LIB = "C:\gtk-build\gtk\x64\release\lib;" + $env:LIB | |
$env:INCLUDE = "C:\gtk-build\gtk\x64\release\include;C:\gtk-build\gtk\x64\release\include\cairo;C:\gtk-build\gtk\x64\release\include\glib-2.0;C:\gtk-build\gtk\x64\release\include\gobject-introspection-1.0;C:\gtk-build\gtk\x64\release\lib\glib-2.0\include;" + $env:INCLUDE | |
# Install PyGObject and pycairo | |
pip install --force-reinstall (Resolve-Path C:\gtk-build\build\x64\release\pygobject\dist\PyGObject*.whl) | |
pip install --force-reinstall (Resolve-Path C:\gtk-build\build\x64\release\pycairo\dist\pycairo*.whl) | |
# Check GObject availability | |
python -c 'import gi; gi.require_version("Gtk", "3.0"); from gi.repository import GObject, Gio, GLib, Gtk, Gdk' | |
if ($LASTEXITCODE) { exit $LASTEXITCODE } | |
cd installer | |
# Package | |
.\build-windows.ps1 $PACKAGE_VERSION | |
if ($LASTEXITCODE) { exit $LASTEXITCODE } | |
if(!(Test-Path ".\dist\skytemple\skytemple.exe")){ | |
exit 1 | |
} | |
- name: Create installer | |
uses: joncloud/makensis-action@v4.1 | |
with: | |
script-file: "installer/skytemple.nsi" | |
arguments: "/DPRODUCT_VERSION=${{ env.PACKAGE_VERSION }} /DINST_LIST=install_list.nsh /DUNINST_LIST=uninstall_list.nsh" | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: skytemple-windows-app-x64 | |
path: | | |
installer/skytemple-*.exe | |
package-mac: | |
runs-on: macos-12 | |
name: Build and package for Mac OS (Intel) | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Rewrite version for dev if not tag | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
run: | | |
perl -i -pe "s/version\s*=\s*\"(.*?)(\.rc.*|\.a.*|\.post.*)?\"/version=\"\1.dev0+${GITHUB_SHA::8}\"/" pyproject.toml | |
echo "IS_DEV_BUILD=1" >> $GITHUB_ENV | |
- name: Note version | |
run: | | |
python3 -m venv .yq-venv | |
. .yq-venv/bin/activate | |
pip install yq | |
echo "PACKAGE_VERSION=$(tomlq '.project.version' pyproject.toml -r)" >> $GITHUB_ENV | |
- name: Install base packages | |
run: | | |
brew install enchant pygobject3 gtk+3 python@3.12 gtksourceview4 adwaita-icon-theme sdl12-compat sdl2 cmake | |
echo "PATH=/usr/local/opt/python@3.12/bin:/usr/local/bin:$PATH" >> $GITHUB_ENV | |
python3.12 -m venv .venv | |
. .venv/bin/activate | |
pip3 debug --verbose # print compatible tags etc. for debugging purposes | |
- name: Make sure PyGObject is available. | |
run: | | |
. .venv/bin/activate | |
pip3 install "pygobject>=3.44.0" | |
- name: Install and package | |
run: | | |
. .venv/bin/activate | |
# Install other dependencies and SkyTemple itself | |
pip3 install skytemple-rust 'pyinstaller~=6.0' | |
if [ -n "$IS_DEV_BUILD" ]; then | |
IS_MACOS=1 installer/install-skytemple-rust.sh x86_64 | |
fi | |
pip3 install -r requirements-frozen.txt | |
# Generate MO localization files | |
installer/generate-mo.sh | |
pip3 install '.[eventserver]' | |
if [ -n "$IS_DEV_BUILD" ]; then | |
installer/install-skytemple-components-from-git.sh | |
fi | |
# Check GObject availability | |
python -c 'import gi; gi.require_version("Gtk", "3.0"); from gi.repository import GObject, Gio, GLib, Gtk, Gdk' | |
cd installer | |
# Download armips | |
curl https://skytemple.org/build_deps/mac/armips -O | |
chmod +x armips | |
# Package | |
./build-mac.sh $PACKAGE_VERSION | |
- name: Create installer | |
run: | | |
# See https://github.com/sindresorhus/create-dmg | |
# create-dmg automatically generates an installer icon if imagemagick is installed | |
brew install graphicsmagick imagemagick | |
# This tool returns exit code 2 if the DMG was created but code signing failed for some reason | |
npx create-dmg --dmg-title="SkyTemple" "installer/dist/SkyTemple.app" installer || true | |
- name: Upload .dmg | |
uses: actions/upload-artifact@v4 | |
with: | |
name: skytemple-mac-dmg-x86_64 | |
path: | | |
installer/SkyTemple*.dmg | |
package-mac-arm64: | |
runs-on: macos-14 | |
name: Build and package for Mac OS (ARM) | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Rewrite version for dev if not tag | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
run: | | |
perl -i -pe "s/version\s*=\s*\"(.*?)(\.rc.*|\.a.*|\.post.*)?\"/version=\"\1.dev0+${GITHUB_SHA::8}\"/" pyproject.toml | |
echo "IS_DEV_BUILD=1" >> $GITHUB_ENV | |
- name: Note version | |
run: | | |
python3 -m venv .yq-venv | |
. .yq-venv/bin/activate | |
pip install yq | |
echo "PACKAGE_VERSION=$(tomlq '.project.version' pyproject.toml -r)" >> $GITHUB_ENV | |
- name: Install base packages | |
run: | | |
brew install enchant pygobject3 gtk+3 python@3.12 gtksourceview4 adwaita-icon-theme sdl12-compat sdl2 cmake | |
echo "PATH=/usr/local/opt/python@3.12/bin:/usr/local/bin:$PATH" >> $GITHUB_ENV | |
python3.12 -m venv .venv | |
. .venv/bin/activate | |
pip3 debug --verbose # print compatible tags etc. for debugging purposes | |
- name: Make sure PyGObject is available. | |
run: | | |
. .venv/bin/activate | |
pip3 install "pygobject>=3.44.0" | |
- name: Install and package | |
run: | | |
. .venv/bin/activate | |
# Install other dependencies and SkyTemple itself | |
pip3 install skytemple-rust 'pyinstaller~=6.0' | |
if [ -n "$IS_DEV_BUILD" ]; then | |
IS_MACOS=1 installer/install-skytemple-rust.sh x86_64 | |
fi | |
pip3 install -r requirements-frozen.txt | |
# Generate MO localization files | |
installer/generate-mo.sh | |
pip3 install '.[eventserver]' | |
if [ -n "$IS_DEV_BUILD" ]; then | |
installer/install-skytemple-components-from-git.sh | |
fi | |
# Check GObject availability | |
python -c 'import gi; gi.require_version("Gtk", "3.0"); from gi.repository import GObject, Gio, GLib, Gtk, Gdk' | |
cd installer | |
# Download armips | |
curl https://skytemple.org/build_deps/mac/armips-mac-arm64 -o armips | |
chmod +x armips | |
# Package | |
./build-mac.sh $PACKAGE_VERSION | |
- name: Create installer | |
run: | | |
# See https://github.com/sindresorhus/create-dmg | |
# create-dmg automatically generates an installer icon if imagemagick is installed | |
brew install graphicsmagick imagemagick | |
# This tool returns exit code 2 if the DMG was created but code signing failed for some reason | |
npx create-dmg --dmg-title="SkyTemple" "installer/dist/SkyTemple.app" installer || true | |
- name: Upload .dmg | |
uses: actions/upload-artifact@v4 | |
with: | |
name: skytemple-mac-dmg-arm64 | |
path: | | |
installer/SkyTemple*.dmg |