The-Powder-Toy/.github/workflows/build.yaml
2022-04-19 06:25:24 +02:00

261 lines
11 KiB
YAML

name: build
on:
push:
branches:
- '*'
tags:
- 'v*.*'
- 'snapshot-*'
- 'tptlibsdev-*'
pull_request:
branches:
- '*'
jobs:
release:
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
can_publish: ${{ steps.starcatcher_check.outputs.can_publish }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.10'
- id: get_type
run: python3 ./.github/get-type.py ${{ github.ref }}
- id: create_release
if: steps.get_type.outputs.TYPE != 'dev'
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ${{ steps.get_type.outputs.NAME }}
draft: true
prerelease: false
- id: starcatcher_check
if: steps.get_type.outputs.TYPE != 'dev'
run: bash -c './.github/starcatcher-check.sh'
env:
STARCATCHER_PUBLISH_HOSTPORT: ${{ secrets.STARCATCHER_PUBLISH_HOSTPORT }}
build:
runs-on: ${{ matrix.os }}
needs: [release]
strategy:
fail-fast: false
matrix:
# | x86_64 | i686 | arm64 | arm
# | lin | mac | win | and | lin | mac | win | and | lin | mac | win | and | lin | mac | win | and
# ---------------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------
# gcc | | | NO | | NO | NO | NO | | NO | | NO | | NO | NO | NO |
# static msvc | NO | NO | | NO | NO | NO | | NO | NO | NO | NO | NO | NO | NO | NO | NO
# mingw | | NO | | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO
# gcc | | | NO | NO | NO | NO | NO | NO | NO |NO [1]| NO | NO | NO | NO | NO | NO
# dynamic msvc | NO | NO | | NO | NO | NO | | NO | NO | NO | NO | NO | NO | NO | NO | NO
# mingw | | NO | | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO | NO
#
# [1] This is only required for development on ARM Macs. We have no access to such devices, so someone will
# have to help us figure out how to get dynamic libraries.
#
# Please keep this matrix in sync with the other one in this file, see the ### blocks.
# The only difference should be that the second matrix has all mingw cells disabled; we don't publish mingw builds on starcatcher.
#########################################################
############# BEGIN BLOCK FOR COPYING BELOW #############
#########################################################
machine_short: [x86_64, i686, arm64, arm]
platform_short: [lin, mac, win, and]
toolset_short: [gcc, msvc, mingw]
static_dynamic: [static, dynamic]
exclude:
- toolset_short: mingw
machine_short: i686 # remove this line after copying the matrix below
- toolset_short: mingw # remove this line after copying the matrix below
platform_short: mac # remove this line after copying the matrix below
- machine_short: i686
platform_short: lin
- machine_short: i686
platform_short: mac
- toolset_short: msvc
platform_short: lin
- toolset_short: msvc
platform_short: mac
- toolset_short: gcc
platform_short: win
- platform_short: lin
machine_short: arm64
- platform_short: win
machine_short: arm64
- platform_short: mac # see [1]
static_dynamic: dynamic
machine_short: arm64
- platform_short: and
static_dynamic: dynamic
- platform_short: and
toolset_short: msvc
- platform_short: and
toolset_short: mingw
- platform_short: lin
machine_short: arm
- platform_short: win
machine_short: arm
- platform_short: mac
machine_short: arm
#########################################################
############## END BLOCK FOR COPYING BELOW ##############
#########################################################
include:
- platform_short: lin
os: ubuntu-18.04
prefix: ''
suffix: ''
- platform_short: mac
os: macos-11.0
prefix: ''
suffix: ''
- platform_short: win
os: windows-2019
prefix: ''
suffix: '.exe'
- platform_short: lin
toolset_short: mingw
os: ubuntu-20.04
prefix: ''
suffix: '.exe'
- platform_short: and
os: ubuntu-18.04
prefix: ''
suffix: '.apk'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.10'
- id: get_type
run: python3 ./.github/get-type.py ${{ github.ref }}
- if: matrix.platform_short == 'lin' && matrix.toolset_short == 'mingw'
run: sudo apt update && sudo apt install g++-mingw-w64-x86-64
- if: matrix.platform_short == 'mac'
run: brew install pkg-config coreutils
- if: matrix.platform_short == 'mac' && matrix.static_dynamic != 'static'
run: brew install luajit curl fftw zlib sdl2
- if: matrix.platform_short == 'lin' && matrix.static_dynamic != 'static'
run: sudo apt update && sudo apt install libluajit-5.1-dev libcurl4-openssl-dev libfftw3-dev zlib1g-dev libsdl2-dev
- run: python3 -m pip install meson ninja
- run: bash -c './.github/build.sh'
env:
PLATFORM_SHORT: ${{ matrix.platform_short }}
MACHINE_SHORT: ${{ matrix.machine_short }}
TOOLSET_SHORT: ${{ matrix.toolset_short }}
STATIC_DYNAMIC: ${{ matrix.static_dynamic }}
RELNAME: ${{ steps.get_type.outputs.NAME }}
RELTYPE: ${{ steps.get_type.outputs.TYPE }}
MOD_ID: ${{ steps.get_type.outputs.MOD_ID }}
- uses: actions/upload-release-asset@v1
if: steps.get_type.outputs.TYPE != 'dev' && matrix.static_dynamic == 'static'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.release.outputs.upload_url }}
asset_path: ${{ matrix.prefix }}powder${{ matrix.suffix }}
asset_name: ${{ matrix.prefix }}powder-${{ steps.get_type.outputs.NAME }}-${{ matrix.machine_short }}-${{ matrix.platform_short }}-${{ matrix.toolset_short }}-${{ matrix.static_dynamic }}${{ matrix.suffix }}
asset_content_type: application/zip
- uses: actions/upload-artifact@v2
if: matrix.static_dynamic == 'static'
with:
path: ${{ matrix.prefix }}powder${{ matrix.suffix }}
name: ${{ matrix.prefix }}powder-${{ steps.get_type.outputs.NAME }}-${{ matrix.machine_short }}-${{ matrix.platform_short }}-${{ matrix.toolset_short }}-${{ matrix.static_dynamic }}${{ matrix.suffix }}
starcatcher-publish:
runs-on: ubuntu-latest
needs: [build, release]
if: needs.release.outputs.can_publish == 'yes' && startsWith(github.ref, 'refs/tags/') # not a perfect match but get-type.py takes care of this in job build
strategy:
fail-fast: false
matrix:
#########################################################
############# BEGIN BLOCK COPIED FROM ABOVE #############
#########################################################
machine_short: [x86_64, i686, arm64, arm]
platform_short: [lin, mac, win, and]
toolset_short: [gcc, msvc, mingw]
static_dynamic: [static, dynamic]
exclude:
- toolset_short: mingw
- machine_short: i686
platform_short: lin
- machine_short: i686
platform_short: mac
- toolset_short: msvc
platform_short: lin
- toolset_short: msvc
platform_short: mac
- toolset_short: gcc
platform_short: win
- platform_short: lin
machine_short: arm64
- platform_short: win
machine_short: arm64
- platform_short: mac # see [1]
static_dynamic: dynamic
machine_short: arm64
- platform_short: and
static_dynamic: dynamic
- platform_short: and
toolset_short: msvc
- platform_short: and
toolset_short: mingw
- platform_short: lin
machine_short: arm
- platform_short: win
machine_short: arm
- platform_short: mac
machine_short: arm
#########################################################
############## END BLOCK COPIED FROM ABOVE ##############
#########################################################
- static_dynamic: dynamic
include:
- platform_short: lin
prefix: ''
suffix: ''
- platform_short: mac
prefix: ''
suffix: ''
- platform_short: win
prefix: ''
suffix: '.exe'
- platform_short: and
prefix: ''
suffix: '.apk'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.10'
- id: get_type
run: python3 ./.github/get-type.py ${{ github.ref }}
- uses: actions/download-artifact@v1
with:
name: ${{ matrix.prefix }}powder-${{ steps.get_type.outputs.NAME }}-${{ matrix.machine_short }}-${{ matrix.platform_short }}-${{ matrix.toolset_short }}-${{ matrix.static_dynamic }}${{ matrix.suffix }}
- run: sudo apt update && sudo apt install lftp
- if: steps.get_type.outputs.TYPE != 'dev' && matrix.static_dynamic == 'static'
run: bash -c './.github/starcatcher-publish.sh ${{ matrix.prefix }}powder${{ matrix.suffix }}'
env:
STARCATCHER_PUBLISH_HOSTPORT: ${{ secrets.STARCATCHER_PUBLISH_HOSTPORT }}
STARCATCHER_PUBLISH_USERNAME: ${{ secrets.STARCATCHER_PUBLISH_USERNAME }}
STARCATCHER_PUBLISH_PASSWORD: ${{ secrets.STARCATCHER_PUBLISH_PASSWORD }}
STARCATCHER_PUBLISH_FILENAME: ${{ matrix.prefix }}powder-${{ steps.get_type.outputs.NAME }}-${{ matrix.machine_short }}-${{ matrix.platform_short }}-${{ matrix.toolset_short }}-${{ matrix.static_dynamic }}${{ matrix.suffix }}
starcatcher-release:
runs-on: ubuntu-latest
needs: [starcatcher-publish, release]
if: needs.release.outputs.can_publish == 'yes' && startsWith(github.ref, 'refs/tags/') # not a perfect match but get-type.py takes care of this in job build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.10'
- id: get_type
run: python3 ./.github/get-type.py ${{ github.ref }}
- run: ./.github/starcatcher-release.sh "https://starcatcher.us/TPT/perform-release.lua?mod=${{ steps.get_type.outputs.MOD_ID }}&type=${{ steps.get_type.outputs.TYPE }}&name=${{ steps.get_type.outputs.NAME }}&commit=${{ github.sha }}"