phoenix-firestorm/.github/workflows/build_viewer.yml

177 lines
6.8 KiB
YAML

name: Build viewer
on: push
env:
AUTOBUILD_VARIABLES_FILE: ${{github.workspace}}/build-variables/variables
EXTRA_ARGS: -DFMODSTUDIO=ON -DUSE_KDU=ON --crashreporting
build_secrets_checkout: ${{github.workspace}}/signing
jobs:
build_matrix:
strategy:
matrix:
os: [macos-10.15,ubuntu-18.04,windows-2022]
grid: [sl,os]
addrsize: [64,32]
exclude:
- os: ubuntu-18.04
addrsize: 32
- os: macos-10.15
addrsize: 32
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
if: runner.os != 'Windows'
id: py311
with:
python-version: '3.11'
cache: 'pip'
- run: pip3 install -r requirements.txt
- name: Check python version
run: python -V
- name: Setup rclone and download the folder
uses: beqjanus/setup-rclone@main
with:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Set OS/SL flags
run: echo "FS_GRID=-DOPENSIM:BOOL=$([ "${{ matrix.grid }}" == "os" ] && echo "ON" || echo "OFF") -DHAVOK_TPV:BOOL=$([ "${{ matrix.grid }}" == "sl" ] && echo "ON" || echo "OFF")" >> $GITHUB_ENV
shell: bash
- name: find channel from Branch name
run: |
if [[ "${{ github.ref_name }}" == *"Release"* ]]; then
FS_RELEASE_CHAN="Release"
else
FS_RELEASE_CHAN="Beta"
fi
if [[ "${{ matrix.addrsize }}" == "64" ]]; then
FS_RELEASE_CHAN="${FS_RELEASE_CHAN}x64"
fi
echo "FS_RELEASE_CHAN=\"${FS_RELEASE_CHAN}\"" >> $GITHUB_ENV
echo "Building for channel ${FS_RELEASE_CHAN}"
shell: bash
- name: Get the code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Checkout build vars (after the main code)
uses: actions/checkout@v3
with:
repository: FirestormViewer/fs-build-variables
path: build-variables
- name: Define platform variable
run: |
declare -A os_map
os_map=( ["Windows"]="windows" ["Linux"]="linux" ["macOS"]="darwin" )
platform="${os_map[${{ runner.os}}]}"
if [ ${{ matrix.addrsize }} -ne 32 ];
then
platform+=${{ matrix.addrsize }}
fi
echo "platform=${platform}" >> $GITHUB_ENV
shell: bash
- name: rclone the private 3p packages for this platform
run: 'rclone copy fs_bundles: --include "*${{ env.platform }}*bz2" .'
- name: set VSVER for Windows builds
if: runner.os == 'Windows'
run: echo "AUTOBUILD_VSVER=170" >> $GITHUB_ENV
shell: bash
- name: Install certificate
if: runner.os == 'macOS'
env:
FS_CERT: ${{ secrets.FS_CERT }}
FS_CERT_PASS: ${{ secrets.FS_CERT_PASS }}
FS_KEYCHAIN_PASS: ${{ secrets.FS_KEYCHAIN_PASS }}
NOTARIZE_CREDS: ${{ secrets.NOTARIZE_CREDS }}
run: |
mkdir -p ${build_secrets_checkout}/code-signing-osx
echo -n "$FS_CERT" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/fs-cert.p12
echo -n "$FS_CERT_PASS" >${build_secrets_checkout}/code-signing-osx/password.txt
echo -n "$NOTARIZE_CREDS" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/notarize_creds.sh
security create-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain
security set-keychain-settings -lut 21600 ~/Library/Keychains/viewer.keychain
security unlock-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain
security import ${build_secrets_checkout}/code-signing-osx/fs-cert.p12 -P "$FS_CERT_PASS" -A -t cert -f pkcs12 -k ~/Library/Keychains/viewer.keychain
security set-key-partition-list -S apple-tool:,apple:, -s -k "$FS_KEYCHAIN_PASS" -t private ~/Library/Keychains/viewer.keychain
security list-keychain -d user -s ~/Library/Keychains/viewer.keychain
- name: Install required Ubuntu packages
if: runner.os == 'Linux'
run: |
dependencies=("python3-setuptools" "mesa-common-dev" "libgl1-mesa-dev" "libxinerama-dev" "libxrandr-dev" "libpulse-dev" "libglu1-mesa-dev" "libfreetype6-dev" "libfontconfig1")
sudo apt-get update
sudo apt-get install -y "${dependencies[@]}"
- name: edit installables
run: |
function find_most_recent_bundle() {
local pattern="$1*${{ env.platform }}*"
local most_recent_file=$(find "${{ github.workspace }}" -name "$pattern" -printf '%T@ %f\n' 2>/dev/null | sort -n | tail -1 | awk '{print $2}')
if [ -z "$most_recent_file" ]; then
echo ""
else
echo "$most_recent_file"
fi
}
if [[ "${{ runner.os }}" == "Windows" ]]; then
path_sep="\\"
else
path_sep="/"
fi
packages=("fmodstudio" "llphysicsextensions_tpv" "kdu")
for package in "${packages[@]}"; do
package_file=$(find_most_recent_bundle $package)
full_package_path="${{ github.workspace }}${path_sep}${package_file}"
if [ -n "$package_file" ]; then
echo "Installing ${package_file}"
autobuild installables edit ${package} platform=${{ env.platform }} url="file:///${full_package_path}"
else
echo "No bundle found for ${package} on ${{ env.platform }}"
fi
done
shell: bash
- name: Configure
run: autobuild configure --debug -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
shell: bash
- name: build
run: autobuild build --debug -c ReleaseFS -A${{matrix.addrsize}} --no-configure
shell: bash
- name: publish Windows artifacts
if: runner.os == 'Windows'
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
path: |
build-*/newview/Release/*Setup.exe
build-*/newview/Release/*.xz
- name: publish Linux artifacts
if: runner.os == 'Linux'
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
path: |
build-linux-*/newview/*.xz
build-linux-*/newview/*.bz2
- name: publish MacOS artifacts
if: runner.os == 'macOS'
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
path: |
build-darwin-*/newview/*.dmg
build-darwin-*/newview/*.bz2