Skip to content

New Crowdin updates #5561

New Crowdin updates

New Crowdin updates #5561

# 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
- l10n_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 }}'
code-formatting:
runs-on: ubuntu-latest
name: Code Format Check
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install black
- uses: psf/black@stable
with:
options: "--check -t py39"
src: "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 Python wheels
uses: RalfG/[email protected]_x86_64
with:
python-versions: 'cp39-cp39 cp310-cp310 cp311-cp311 cp312-cp312'
system-packages: 'gettext'
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist/*.whl
deploy:
if: startsWith(github.ref, 'refs/tags/')
needs:
- build
- package-windows
- package-mac
runs-on: ubuntu-latest
name: Deploy wheels to PyPI
steps:
- name: Download wheels
uses: actions/download-artifact@v3
with:
name: wheels
- name: Set up Python 3.11
uses: actions/setup-python@v4
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
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@v4
with:
python-version: "3.11"
architecture: "x64"
- name: Cache GTK-Build
id: cache-gtk-build
uses: actions/cache@v3
with:
path: "C:\\gtk-build"
key: win-gtk-build-2023-10-1-1
restore-keys: |
win-gtk-build-2023-10-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 "gvsbuild==2023.10.1"
- 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: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
cd installer
# Package
.\build-windows.ps1 $PACKAGE_VERSION
if(!(Test-Path ".\dist\skytemple\skytemple.exe")){
return 1
}
# Install latest skytemple-rust
if ($env:IS_DEV_BUILD) {
bash .\install-skytemple-rust.sh
}
- name: Create installer
uses: joncloud/[email protected]
with:
script-file: "installer/skytemple.nsi"
arguments: "/DPRODUCT_VERSION=${{ env.PACKAGE_VERSION }}"
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: skytemple-windows-app-x64
path: |
installer/skytemple-*-install-*.exe
package-mac:
runs-on: macos-11
name: Build and package for Mac OS
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 and package
run: |
# git is already installed.
brew install enchant pygobject3 gtk+3 [email protected] gtksourceview4 adwaita-icon-theme sdl12-compat sdl2 cmake
pip3 install -U certifi
PATH=/usr/local/opt/[email protected]/bin:/usr/local/bin:$PATH
# Install other dependencies and SkyTemple itself
pip3 install py-desmume 'pyinstaller~=5.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
cd installer
# Install themes
curl https://skytemple.org/build_deps/Arc.zip -O
unzip Arc.zip > /dev/null
curl https://skytemple.org/build_deps/ZorinBlue.zip -O
unzip ZorinBlue.zip > /dev/null
# Download armips
curl https://skytemple.org/build_deps/mac/armips -O
chmod +x armips
# Package
./build-mac.sh $PACKAGE_VERSION
# Creating a zip makes the artifact upload much faster since there are so many files
zip -r skytemple-mac.zip dist/SkyTemple.app > /dev/null
- name: Upload .app
uses: actions/upload-artifact@v3
with:
name: skytemple-mac-app
path: |
installer/skytemple-mac.zip
- name: Create installer
run: |
PATH=/usr/local/opt/[email protected]/bin:/usr/local/bin:$PATH
# See https://github.com/sindresorhus/create-dmg
# create-dmg automatically generates an installer icon if imagemagick is installed
brew install graphicsmagick imagemagick
npm -g install create-dmg
# 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@v3
with:
name: skytemple-mac-dmg
path: |
installer/SkyTemple*.dmg
create-sentry-release:
if: startsWith(github.ref, 'refs/tags/')
needs:
- deploy
runs-on: ubuntu-latest
name: Create Sentry Release
steps:
- uses: actions/checkout@v4
- uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
with:
environment: 'production'