Files
palera1n/.github/workflows/build.yml
T
2026-08-01 05:09:13 -07:00

552 lines
15 KiB
YAML

name: "Build palera1n"
on:
workflow_dispatch:
push:
branches:
- main
tags:
- v*
paths:
- src/**
- 1stparty/**
- CMakeLists.txt
- Makefile
jobs:
build-loader:
runs-on: macos-15
steps:
- uses: actions/checkout@v4
with:
ref: 9faf50968854aa47de65231e2985d60f6944d627
repository: palera1n/loader
- name: Install dependencies (brew)
run: |
brew install gnu-sed
- name: Select correct Xcode
uses: mobiledevops/xcode-select-version-action@7b50160de7c8bd6a8c4ee2c2e6b5ee0983886c0b
with:
xcode-select-version: 16.4
- name: Build
run: |
agvtool new-version -all $(git rev-parse HEAD)
make package PLATFORM=iphoneos PACKAGE_NAME=palera1nLoader
make package PLATFORM=appletvos PACKAGE_NAME=palera1nLoaderTV
- name: Upload
uses: actions/upload-artifact@v4
with:
name: loader
path: |
packages/*
build-ramdisk:
runs-on: macos-15
needs: [build-loader]
steps:
- uses: actions/checkout@v4
with:
ref: 9cadaa63569ba318677b4ef0869ad984b3663a6c
repository: palera1n/jbinit
submodules: true
- name: Download loader artifacts
uses: actions/download-artifact@v4
with:
name: loader
- name: Select correct Xcode
uses: mobiledevops/xcode-select-version-action@7b50160de7c8bd6a8c4ee2c2e6b5ee0983886c0b
with:
xcode-select-version: 16.4
- name: Install dependencies (brew)
run: |
brew install make gnu-sed ldid-procursus fakeroot
- name: Obtain artifacts
run: |
curl -LO https://static.palera.in/binpack.tar
install -m644 binpack.tar palera1nLoader{TV,}.ipa src
- name: Build
run: |
gmake -j1 tools
gmake -j$(sysctl -n hw.ncpu)
- name: Prepare upload directory
run: |
mkdir upload
mv src/ramdisk.dmg upload/
mv src/binpack.dmg upload/
- name: Upload
uses: actions/upload-artifact@v4
with:
name: embedded
path: |
upload/*
build-pongo:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
ref: e98323f8a09abd80fc4cbcd74dee023b91a1ec22
repository: palera1n/PongoOS
- name: Install dependencies (brew)
run: |
brew install make
- name: Build
run: |
gmake -j$(sysctl -n hw.ncpu)
- name: Prepare upload directory
run: |
mkdir upload
mv build/Pongo.bin upload/
mv build/checkra1n-kpf-pongo upload/
- name: Upload
uses: actions/upload-artifact@v4
with:
name: pongo
path: |
upload/*
build-linux:
runs-on: ubuntu-latest
needs: [build-pongo, build-ramdisk]
strategy:
matrix:
triple:
- i486-linux-musl
- x86_64-linux-musl
- armel-linux-musleabi
- aarch64-linux-musl
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.BUILD_GITHUB_TOKEN }}
submodules: recursive
- name: Download Pongo
uses: actions/download-artifact@v4
with:
name: pongo
path: embedded/
- name: Download embedded artifacts
uses: actions/download-artifact@v4
with:
name: embedded
path: embedded/
- name: Download musl toolchain
run: |
curl -u ${{ secrets.ACTIONS_RESOURCES_LOGIN }} -LO https://static.palera.in/action-resources/musl-cross/${{ matrix.triple }}-cross.tar.zst
tar --zstd -xf ${{ matrix.triple }}-cross.tar.zst
find ./${{ matrix.triple }}-cross -name "*.la" -type f -delete
echo "$(pwd)/${{ matrix.triple }}-cross/bin" >> $GITHUB_PATH
- name: Install Rust target
run: |
case "${{ matrix.triple }}" in
i486-linux-musl)
rustup target add i686-unknown-linux-musl
;;
x86_64-linux-musl)
rustup target add x86_64-unknown-linux-musl
;;
armel-linux-musleabi)
rustup target add arm-unknown-linux-musleabi
;;
aarch64-linux-musl)
rustup target add aarch64-unknown-linux-musl
;;
esac
- name: Install dependencies (apt)
run: |
sudo apt update
sudo apt install -y build-essential cmake autoconf automake libtool pkg-config zstd jq
- name: Build
run: |
SYSROOT_PATH="$("$PWD/${{ matrix.triple }}-cross/bin/${{ matrix.triple }}-gcc" -print-sysroot)"
CC="${{ matrix.triple }}-gcc" CXX="${{ matrix.triple }}-g++" \
make palera1n \
WITH_STATIC=1 \
WITH_TUI=1 \
WITH_CIDERRAIN=1 \
BUILD_TYPE=Release \
CMAKE_SYSROOT="$SYSROOT_PATH" \
CROSS_HOST_TRIPLE="${{ matrix.triple }}" \
JOBS=$(nproc)
${{ matrix.triple }}-strip -s build/palera1n
- name: Package
run: |
cd build
case "${{ matrix.triple }}" in
i486-linux-musl)
cpack
mv palera1n.tar.gz palera1n-linux-x86.tar.gz
;;
x86_64-linux-musl)
cpack
mv palera1n.tar.gz palera1n-linux-x86_64.tar.gz
;;
armel-linux-musleabi)
cpack
mv palera1n.tar.gz palera1n-linux-armel.tar.gz
;;
aarch64-linux-musl)
cpack
mv palera1n.tar.gz palera1n-linux-arm64.tar.gz
;;
esac
- name: Upload
uses: actions/upload-artifact@v4
with:
name: palera1n-${{ matrix.triple }}
path: |
build/*.tar.gz
build-macos:
runs-on: ${{ matrix.os }}
needs: [build-pongo, build-ramdisk]
strategy:
matrix:
include:
- os: macos-latest
arch: arm64
- os: macos-15-intel
arch: x86_64
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.BUILD_GITHUB_TOKEN }}
submodules: recursive
- name: Download Pongo
uses: actions/download-artifact@v4
with:
name: pongo
path: embedded/
- name : Download embedded artifacts
uses: actions/download-artifact@v4
with:
name: embedded
path: embedded/
- name: Install dependencies (brew)
run: |
brew update
brew install make cmake autoconf automake libtool pkg-config
- name: Build
run: |
gmake palera1n WITH_STATIC=1 WITH_GUI=1 WITH_TUI=1 WITH_CIDERRAIN=1 BUILD_TYPE=Release JOBS=$(sysctl -n hw.ncpu)
strip -x build/palera1n.app/Contents/MacOS/palera1n
- name: Package
run: |
cd build && zip -r palera1n-macos-${{ matrix.arch }}.zip palera1n.app
- name: Upload
uses: actions/upload-artifact@v4
with:
name: palera1n-macos-${{ matrix.arch }}
path: |
build/palera1n-macos-${{ matrix.arch }}.zip
build-ios:
runs-on: macos-latest
needs: [build-pongo, build-ramdisk]
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.BUILD_GITHUB_TOKEN }}
submodules: recursive
- name: Setup Procursus
uses: beerpiss/[email protected]
with:
cache: true
mirror: 'https://apt.procurs.us/'
- name: Download Pongo
uses: actions/download-artifact@v4
with:
name: pongo
path: embedded/
- name : Download embedded artifacts
uses: actions/download-artifact@v4
with:
name: embedded
path: embedded/
- name: Install dependencies (brew)
run: |
brew update
brew install make cmake libtool gnu-sed
- name: Build
run: |
gmake palera1n_xcode PLATFORM=iphoneos WITH_STATIC=1 WITH_CIDERRAIN=1 BUILD_TYPE=Release JOBS=$(sysctl -n hw.ncpu)
cmake --build build
codesign --force --sign - --entitlements resources/entitlements.xml build/Debug-iphoneos/palera1n.app/palera1n
- name: Package
run: |
cd build
cpack -DCPACK_PACKAGE_FILE_NAME="palera1n-iphoneos-arm" \
-DCPACK_PACKAGING_INSTALL_PREFIX="/usr/"
cpack -DCPACK_PACKAGE_FILE_NAME="palera1n-iphoneos-arm64" \
-DCPACK_PACKAGING_INSTALL_PREFIX="/var/jb/usr/"
mkdir -p palera1n-iphoneos-arm64/DEBIAN
mkdir -p palera1n-iphoneos-arm/DEBIAN
tar -xf palera1n-iphoneos-arm64.tar.gz -C palera1n-iphoneos-arm64
tar -xf palera1n-iphoneos-arm.tar.gz -C palera1n-iphoneos-arm
cp ../packaging/control palera1n-iphoneos-arm64/DEBIAN/control
cp ../packaging/control palera1n-iphoneos-arm/DEBIAN/control
VERSION=$(grep '^#define PALERAIN_VERSION' ../src/globals.h | cut -d'"' -f2 | tr -cd '0-9.')
gsed 's|@DEB_ARCH@|iphoneos-arm|g' -i palera1n-iphoneos-arm/DEBIAN/control
gsed 's|@DEB_ARCH@|iphoneos-arm64|g' -i palera1n-iphoneos-arm64/DEBIAN/control
gsed 's|@DEB_VERSION@|'"$VERSION"'|g' -i palera1n-iphoneos-arm/DEBIAN/control
gsed 's|@DEB_VERSION@|'"$VERSION"'|g' -i palera1n-iphoneos-arm64/DEBIAN/control
dpkg-deb --build palera1n-iphoneos-arm64
dpkg-deb --build palera1n-iphoneos-arm
- name: Upload
uses: actions/upload-artifact@v4
with:
name: palera1n-iphoneos-arm64
path: |
build/*.deb
build-macos-universal:
runs-on: macos-latest
needs: [build-macos]
steps:
- uses: actions/checkout@v4
- name: Download arm64 artifacts
uses: actions/download-artifact@v4
with:
name: palera1n-macos-arm64
- name: Download x86_64 artifacts
uses: actions/download-artifact@v4
with:
name: palera1n-macos-x86_64
- name: Install dependencies (brew)
run: |
brew update
brew install create-dmg
- name: Create universal binary
run: |
mkdir -p dist build
unzip -o palera1n-macos-arm64.zip -d build/palera1n-macos-arm64
unzip -o palera1n-macos-x86_64.zip -d dist/palera1n-macos-universal
lipo -create \
build/palera1n-macos-arm64/palera1n.app/Contents/MacOS/palera1n \
dist/palera1n-macos-universal/palera1n.app/Contents/MacOS/palera1n \
-output build/palera1n-universal-bin
mv build/palera1n-universal-bin dist/palera1n-macos-universal/palera1n.app/Contents/MacOS/palera1n
- name: Package
run: |
create-dmg \
--volname "palera1n-macos-universal" \
--volicon "packaging/drive.icns" \
--background "packaging/background.png" \
--window-pos 200 120 \
--window-size 510 350 \
--icon-size 100 \
--icon palera1n.app 160 155 \
--hide-extension palera1n.app \
--app-drop-link 350 155 \
dist/palera1n-macos-universal.dmg dist/palera1n-macos-universal
- name: Upload
uses: actions/upload-artifact@v4
with:
name: palera1n-macos-universal
path: |
dist/palera1n-macos-universal.dmg
build-windows:
runs-on: windows-latest
needs: [build-pongo, build-ramdisk]
steps:
- uses: actions/checkout@v4
- name: Download Pongo
uses: actions/download-artifact@v4
with:
name: pongo
path: embedded/
- name: Download embedded artifacts
uses: actions/download-artifact@v4
with:
name: embedded
path: embedded/
- name: Install dependencies (choco)
run: choco install nsis.portable
- name: Install dependencies (msys2)
uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884
with:
msystem: MINGW64
install: >
git
mingw-w64-x86_64-toolchain
mingw-w64-x86_64-cmake
mingw-w64-x86_64-libusb
mingw-w64-x86_64-rust
mingw-w64-x86_64-nsis
mingw-w64-x86_64-jq
libtool
openssl
openssl-devel
python-devel
autoconf
automake
zip
vim
make
patch
update: true
- name: Build
shell: msys2 {0}
run: |
make palera1n_mingw WITH_STATIC=1 WITH_GUI=1 BUILD_TYPE=Release JOBS=$(nproc)
strip -s build/palera1n.exe
- name: Package
run: |
cd build && cpack -DCPACK_PACKAGE_FILE_NAME="palera1n-windows-x86_64-setup"
- name: Upload
uses: actions/upload-artifact@v4
with:
name: palera1n-windows-x86_64
path: |
build/palera1n-windows-x86_64-setup.exe
release:
runs-on: ubuntu-latest
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
needs: [build-ramdisk, build-pongo, build-linux, build-macos-universal, build-windows, build-ios]
steps:
- name: Download embedded artifacts
uses: actions/download-artifact@v4
with:
name: embedded
path: embedded/
- name: Download Pongo
uses: actions/download-artifact@v4
with:
name: pongo
path: embedded/
- name: Download Linux i486 Artifact
uses: actions/download-artifact@v4
with:
name: palera1n-i486-linux-musl
path: dist/
- name: Download Linux x86_64 Artifact
uses: actions/download-artifact@v4
with:
name: palera1n-x86_64-linux-musl
path: dist/
- name: Download Linux armel Artifact
uses: actions/download-artifact@v4
with:
name: palera1n-armel-linux-musleabi
path: dist/
- name: Download Linux aarch64 Artifact
uses: actions/download-artifact@v4
with:
name: palera1n-aarch64-linux-musl
path: dist/
- name: Download macOS Universal Artifact
uses: actions/download-artifact@v4
with:
name: palera1n-macos-universal
path: dist/
# - name: Download Windows Artifact
# uses: actions/download-artifact@v4
# with:
# name: palera1n-windows-x86_64
# path: dist/
- name: Download iOS Artifact
uses: actions/download-artifact@v4
with:
name: palera1n-iphoneos-arm64
path: dist/
- name: Prepare artifacts
run: |
find . -maxdepth 1 -type f -print0 | tar --null -czf ../dist/resource.tar.gz --files-from=-
working-directory: embedded
- name: Extract Version
id: get_version
run: |
echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Create Release
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65
with:
name: ${{ steps.get_version.outputs.version }}
tag_name: ${{ steps.get_version.outputs.version }}
files: |
dist/*
generate_release_notes: true
fail_on_unmatched_files: true
draft: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}