Skip to content

Github Actions: Update .pot string index #1

Github Actions: Update .pot string index

Github Actions: Update .pot string index #1

# 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.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
- name: Lint with ruff
run: ruff check --output-format=github skytemple_randomizer
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_randomizer
build:
runs-on: ubuntu-latest
name: Build the Python wheel
container:
image: ghcr.io/skytemple/gtk4-build-image:1
steps:
# For tags we assume the version in pyproject.toml is correct!
- 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
- name: Note version
run: |
echo "PACKAGE_VERSION=$(tomlq '.project.version' pyproject.toml -r)" >> $GITHUB_ENV
- name: Run make
run: make
- name: Build Python wheels
run: |
python3 -m pip install --upgrade 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
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
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-vgtk4-2024.4.0-1
restore-keys: |
win-gtk-build-vgtk4-2024.4.0-1
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
# 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==2024.4.0"
- 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 gtk4 pygobject openssl gettext libadwaita 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 Randomizer
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)
# Convert Blueprint files
.\build-blp-to-ui.ps1
if ($LASTEXITCODE) { exit $LASTEXITCODE }
cd installer
# Package
.\build-windows.ps1 $PACKAGE_VERSION
if ($LASTEXITCODE) { exit $LASTEXITCODE }
if(!(Test-Path ".\dist\skytemple_randomizer\skytemple_randomizer.exe")){
exit 1
}
- name: Create installer
uses: joncloud/[email protected]
with:
script-file: "installer/skytemple-randomizer.nsi"
arguments: "/DPRODUCT_VERSION=${{ env.PACKAGE_VERSION }}"
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: skytemple-randomizer-windows-app-x64
path: |
installer/skytemple-randomizer-*.exe
package-mac:
runs-on: macos-14
name: Build and package for Mac OS
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 pygobject3 gtk4 [email protected] libadwaita adwaita-icon-theme sdl cmake
echo "PATH=/usr/local/opt/[email protected]/bin:/usr/local/bin:$PATH" >> $GITHUB_ENV
python3.11 -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: Convert Blueprint files
run: |
. .venv/bin/activate
./build-blp-to-ui.sh
- name: Install and package
run: |
. .venv/bin/activate
# Install other dependencies and SkyTemple Randomizer itself
pip3 install skytemple-rust 'pyinstaller~=5.0'
pip3 install -r requirements-mac-windows.txt
# Generate MO localization files
installer/generate-mo.sh
pip3 install '.[gtk]'
if [ -n "$IS_DEV_BUILD" ]; then
installer/install-skytemple-components-from-git.sh
fi
cd installer
# 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-randomizer-mac.zip dist/SkyTempleRandomizer.app > /dev/null
- name: Upload .app
uses: actions/upload-artifact@v4
with:
name: skytemple-randomizer-mac-app
path: |
installer/skytemple-randomizer-mac.zip
- 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=SkyTempleRandomizer installer/dist/SkyTempleRandomizer.app installer || true
- name: Upload .dmg
uses: actions/upload-artifact@v4
with:
name: skytemple-randomizer-mac-dmg
path: |
installer/SkyTempleRandomizer*.dmg