launcher overhaul #197
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
# This workflow will build a release-like distribution when manually dispatched | |
name: Build | |
on: | |
push: | |
paths: | |
- '.github/workflows/build.yml' | |
- 'setup.py' | |
- 'requirements.txt' | |
- '*.iss' | |
pull_request: | |
paths: | |
- '.github/workflows/build.yml' | |
- 'setup.py' | |
- 'requirements.txt' | |
- '*.iss' | |
workflow_dispatch: | |
env: | |
ENEMIZER_VERSION: 7.1 | |
APPIMAGETOOL_VERSION: 13 | |
jobs: | |
# build-release-macos: # LF volunteer | |
build-win-py38: # RCs will still be built and signed by hand | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.8' | |
- name: Download run-time dependencies | |
run: | | |
Invoke-WebRequest -Uri https://github.com/Ijwu/Enemizer/releases/download/${Env:ENEMIZER_VERSION}/win-x64.zip -OutFile enemizer.zip | |
Expand-Archive -Path enemizer.zip -DestinationPath EnemizerCLI -Force | |
choco install innosetup --version=6.2.2 --allow-downgrade | |
- name: Build | |
run: | | |
python -m pip install --upgrade pip | |
python setup.py build_exe --yes | |
if ( $? -eq $false ) { | |
Write-Error "setup.py failed!" | |
exit 1 | |
} | |
$NAME="$(ls build | Select-String -Pattern 'exe')".Split('.',2)[1] | |
$ZIP_NAME="Archipelago_$NAME.7z" | |
echo "$NAME -> $ZIP_NAME" | |
echo "ZIP_NAME=$ZIP_NAME" >> $Env:GITHUB_ENV | |
New-Item -Path dist -ItemType Directory -Force | |
cd build | |
Rename-Item "exe.$NAME" Archipelago | |
7z a -mx=9 -mhe=on -ms "../dist/$ZIP_NAME" Archipelago | |
Rename-Item Archipelago "exe.$NAME" # inno_setup.iss expects the original name | |
- name: Build Setup | |
run: | | |
& "${env:ProgramFiles(x86)}\Inno Setup 6\iscc.exe" inno_setup.iss /DNO_SIGNTOOL | |
if ( $? -eq $false ) { | |
Write-Error "Building setup failed!" | |
exit 1 | |
} | |
$contents = Get-ChildItem -Path setups/*.exe -Force -Recurse | |
$SETUP_NAME=$contents[0].Name | |
echo "SETUP_NAME=$SETUP_NAME" >> $Env:GITHUB_ENV | |
- name: Check build loads expected worlds | |
shell: bash | |
run: | | |
cd build/exe* | |
mv Players/Templates/meta.yaml . | |
ls -1 Players/Templates | sort > setup-player-templates.txt | |
rm -R Players/Templates | |
timeout 30 ./ArchipelagoLauncher "Generate Template Options" || true | |
ls -1 Players/Templates | sort > generated-player-templates.txt | |
cmp setup-player-templates.txt generated-player-templates.txt \ | |
|| diff setup-player-templates.txt generated-player-templates.txt | |
mv meta.yaml Players/Templates/ | |
- name: Test Generate | |
shell: bash | |
run: | | |
cd build/exe* | |
cp Players/Templates/Clique.yaml Players/ | |
timeout 30 ./ArchipelagoGenerate | |
- name: Store 7z | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.ZIP_NAME }} | |
path: dist/${{ env.ZIP_NAME }} | |
compression-level: 0 # .7z is incompressible by zip | |
if-no-files-found: error | |
retention-days: 7 # keep for 7 days, should be enough | |
- name: Store Setup | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.SETUP_NAME }} | |
path: setups/${{ env.SETUP_NAME }} | |
if-no-files-found: error | |
retention-days: 7 # keep for 7 days, should be enough | |
build-ubuntu2004: | |
runs-on: ubuntu-20.04 | |
steps: | |
# - copy code below to release.yml - | |
- uses: actions/checkout@v4 | |
- name: Install base dependencies | |
run: | | |
sudo apt update | |
sudo apt -y install build-essential p7zip xz-utils wget libglib2.0-0 | |
sudo apt -y install python3-gi libgirepository1.0-dev # should pull dependencies for gi installation below | |
- name: Get a recent python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Install build-time dependencies | |
run: | | |
echo "PYTHON=python3.11" >> $GITHUB_ENV | |
wget -nv https://github.com/AppImage/AppImageKit/releases/download/$APPIMAGETOOL_VERSION/appimagetool-x86_64.AppImage | |
chmod a+rx appimagetool-x86_64.AppImage | |
./appimagetool-x86_64.AppImage --appimage-extract | |
echo -e '#/bin/sh\n./squashfs-root/AppRun "$@"' > appimagetool | |
chmod a+rx appimagetool | |
- name: Download run-time dependencies | |
run: | | |
wget -nv https://github.com/Ijwu/Enemizer/releases/download/$ENEMIZER_VERSION/ubuntu.16.04-x64.7z | |
7za x -oEnemizerCLI/ ubuntu.16.04-x64.7z | |
- name: Build | |
run: | | |
# pygobject is an optional dependency for kivy that's not in requirements | |
# charset-normalizer was somehow incomplete in the github runner | |
"${{ env.PYTHON }}" -m venv venv | |
source venv/bin/activate | |
"${{ env.PYTHON }}" -m pip install --upgrade pip PyGObject charset-normalizer | |
python setup.py build_exe --yes bdist_appimage --yes | |
echo -e "setup.py build output:\n `ls build`" | |
echo -e "setup.py dist output:\n `ls dist`" | |
cd dist && export APPIMAGE_NAME="`ls *.AppImage`" && cd .. | |
export TAR_NAME="${APPIMAGE_NAME%.AppImage}.tar.gz" | |
(cd build && DIR_NAME="`ls | grep exe`" && mv "$DIR_NAME" Archipelago && tar -cv Archipelago | gzip -8 > ../dist/$TAR_NAME && mv Archipelago "$DIR_NAME") | |
echo "APPIMAGE_NAME=$APPIMAGE_NAME" >> $GITHUB_ENV | |
echo "TAR_NAME=$TAR_NAME" >> $GITHUB_ENV | |
# - copy code above to release.yml - | |
- name: Build Again | |
run: | | |
source venv/bin/activate | |
python setup.py build_exe --yes | |
- name: Check build loads expected worlds | |
shell: bash | |
run: | | |
cd build/exe* | |
mv Players/Templates/meta.yaml . | |
ls -1 Players/Templates | sort > setup-player-templates.txt | |
rm -R Players/Templates | |
timeout 30 ./ArchipelagoLauncher "Generate Template Options" || true | |
ls -1 Players/Templates | sort > generated-player-templates.txt | |
cmp setup-player-templates.txt generated-player-templates.txt \ | |
|| diff setup-player-templates.txt generated-player-templates.txt | |
mv meta.yaml Players/Templates/ | |
- name: Test Generate | |
shell: bash | |
run: | | |
cd build/exe* | |
cp Players/Templates/Clique.yaml Players/ | |
timeout 30 ./ArchipelagoGenerate | |
- name: Store AppImage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.APPIMAGE_NAME }} | |
path: dist/${{ env.APPIMAGE_NAME }} | |
if-no-files-found: error | |
retention-days: 7 | |
- name: Store .tar.gz | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.TAR_NAME }} | |
path: dist/${{ env.TAR_NAME }} | |
compression-level: 0 # .gz is incompressible by zip | |
if-no-files-found: error | |
retention-days: 7 |