New Crowdin updates #6358
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_type_checks.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.txt ruff | |
- 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 | |
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-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-mac-windows.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-mac-windows.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 |