fix packaging step #321
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
name: Build hUGETracker | |
on: | |
- push | |
- pull_request | |
jobs: | |
build: | |
strategy: | |
matrix: | |
os: | |
- ubuntu-20.04 | |
- macos-13 | |
- windows-2019 | |
include: | |
- os: ubuntu-20.04 | |
name: Linux | |
- os: macos-13 | |
name: Mac | |
- os: windows-2019 | |
name: Windows | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Check out hUGETracker | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
path: hUGETracker | |
submodules: true # This is intentionally not "recursive", change if needed | |
- name: Install Ubuntu dependencies | |
if: matrix.name == 'Linux' | |
run: | | |
sudo apt -qq update | |
sudo apt install -yq libsdl2-dev bison | |
curl -Lo rgbds.tar.gz 'https://github.com/gbdev/rgbds/releases/download/v0.6.1/rgbds-0.6.1.tar.gz' | |
tar xvf rgbds.tar.gz rgbds/{include,src,Makefile} | |
cd rgbds | |
make -j4 rgbasm rgblink rgbfix Q= | |
wget https://netactuate.dl.sourceforge.net/project/lazarus/Lazarus%20Linux%20amd64%20DEB/Lazarus%203.0/lazarus-project_3.0.0-0_amd64.deb | |
wget https://cytranet.dl.sourceforge.net/project/lazarus/Lazarus%20Linux%20amd64%20DEB/Lazarus%203.0/fpc-laz_3.2.2-210709_amd64.deb | |
wget https://versaweb.dl.sourceforge.net/project/lazarus/Lazarus%20Linux%20amd64%20DEB/Lazarus%203.0/fpc-src_3.2.2-210709_amd64.deb | |
sudo apt install -yq ./fpc-laz_3.2.2-210709_amd64.deb ./fpc-src_3.2.2-210709_amd64.deb ./lazarus-project_3.0.0-0_amd64.deb | |
# FFmpeg dependencies | |
sudo apt-get -y install autoconf automake cmake libtool meson ninja-build pkg-config yasm zlib1g-dev | |
- name: Install macOS dependencies | |
if: matrix.name == 'Mac' | |
run: | | |
brew install --cask lazarus | |
brew install ./hUGETracker/.github/brew/rgbds.rb | |
brew install automake libtool shtool wget yasm | |
curl -Lo 'sdl2.tgz' https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.28.5.tar.gz | |
tar xzf sdl2.tgz | |
pushd SDL-release-2.28.5 | |
./configure --disable-video --disable-render --disable-haptic --disable-joystick \ | |
--disable-power --disable-hidapi --disable-sensor --disable-filesystem \ | |
--disable-timers --disable-atomic --disable-file --disable-misc \ | |
--disable-locale --disable-loadso --disable-cpuinfo | |
make | |
cp build/.libs/libSDL2.a /usr/local/lib | |
popd | |
mkdir rgbds | |
for f in asm link fix; do ln -s `which rgb$f` rgbds/rgb$f; done | |
- name: Install Windows dependencies | |
if: matrix.name == 'Windows' | |
shell: bash | |
run: | | |
choco install lazarus zip | |
curl -Lo 'sdl2.zip' 'https://github.com/libsdl-org/SDL/releases/download/release-2.28.5/SDL2-2.28.5-win32-x64.zip' | |
curl -Lo 'rgbds.zip' 'https://github.com/gbdev/rgbds/releases/download/v0.6.1/rgbds-0.6.1-win64.zip' | |
unzip -d rgbds rgbds.zip rgb{asm,link,fix}.exe | |
- name: Set up MSYS2 | |
if: matrix.name == 'Windows' | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MINGW64 | |
path-type: strict | |
release: false | |
update: false | |
install: >- | |
base-devel | |
mingw-w64-x86_64-toolchain | |
yasm | |
- name: Compile FFmpeg (Windows) | |
if: matrix.name == 'Windows' | |
shell: msys2 {0} | |
run: ./hUGETracker/.github/scripts/build-ffmpeg.sh | |
- name: Compile FFmpeg (Mac and Linux) | |
if: matrix.name == 'Mac' || matrix.name == 'Linux' | |
shell: bash | |
run: ./hUGETracker/.github/scripts/build-ffmpeg.sh | |
- name: Build release | |
shell: bash | |
working-directory: hUGETracker | |
run: | # The PATH manipulation is because the macOS and Windows installs do NOT put it in the PATH >_< | |
export PATH="$PATH":/Applications/Lazarus:/c/lazarus | |
export VERSION_STRING=`git describe --tags --dirty --always` | |
lazbuild --add-package-link src/rackctls/RackCtlsPkg.lpk | |
lazbuild --add-package-link src/bgrabitmap/bgrabitmap/bgrabitmappack.lpk | |
lazbuild src/hUGETracker.lpi --build-mode="Production ${{ matrix.name }}" | |
lazbuild src/uge2source/uge2source.lpi --build-mode=Release | |
- name: Package build | |
shell: bash | |
run: | # macOS does NOT have `realpath` :) | |
mkdir packaging | |
for f in hUGETracker/{sample-songs,src/hUGEDriver,fonts/PixeliteTTF.ttf,keymaps}; do ln -sv "$PWD/$f" packaging; done | |
OBJ=`mktemp` | |
HDOBJ=`mktemp` | |
rgbds/rgbasm -E -i hUGETracker/src/hUGEDriver -o "$HDOBJ" hUGETracker/src/hUGEDriver/hUGEDriver.asm | |
rgbds/rgbasm -i hUGETracker/src/hUGEDriver/include -o "$OBJ" hUGETracker/src/halt.asm | |
rgbds/rgblink -o packaging/halt.gb -n packaging/halt.sym "$OBJ" "$HDOBJ" | |
rgbds/rgbfix -vp0xFF packaging/halt.gb | |
rm "$OBJ" "$HDOBJ" | |
cp -v hUGETracker/src/Release/hUGETracker hUGETracker/src/uge2source/Release/uge2source packaging | |
mv packaging/sample-songs "packaging/Sample Songs" | |
mv packaging/keymaps "packaging/Keymaps" | |
- name: Extra Windows packaging | |
if: matrix.name == 'Windows' | |
shell: bash | |
run: | | |
unzip -d packaging sdl2.zip SDL2.dll | |
cp -v ffmpeg-4.4/ffmpeg.exe rgbds/* packaging | |
- name: Extra Mac packaging | |
if: matrix.name == 'Mac' | |
shell: bash | |
run: | | |
cp -Rpv hUGETracker/src/Release/hUGETracker.app packaging | |
cp -v hUGETracker/graphics/hUGETracker.icns packaging/hUGETracker.app/Contents/Resources | |
mv packaging/{halt.gb,halt.sym,hUGEDriver,PixeliteTTF.ttf} packaging/hUGETracker.app/Contents/Resources | |
for f in asm link fix; do ln -s `which rgb$f` packaging/hUGETracker.app/Contents/MacOS/rgb$f; done | |
cp -v ffmpeg-4.4/ffmpeg packaging/hUGETracker.app/Contents/MacOS | |
# Hacky, but unlikely to break any time soon. | |
ed packaging/hUGETracker.app/Contents/Info.plist << END | |
5i | |
<key>CFBundleIconFile</key> | |
<string>hUGETracker.icns</string> | |
. | |
w | |
q | |
END | |
- name: Extra Linux packaging | |
if: matrix.name == 'Linux' | |
shell: bash | |
run: | | |
for f in asm link fix; do ln -s `which rgb$f` packaging/rgb$f; done | |
cp -v ffmpeg-4.4/ffmpeg packaging | |
- name: Zip files (preserving permissions) | |
shell: bash | |
run: | | |
shopt -s extglob | |
pushd packaging | |
if [ "${{ matrix.name }}" == "Mac" ]; then | |
zip -r ../build.zip !(hUGETracker) | |
else | |
zip -r ../build.zip * | |
fi | |
popd | |
- name: Store build | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ matrix.name }} build | |
path: build.zip |