mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-21 10:03:00 +00:00
248 lines
7.7 KiB
YAML
248 lines
7.7 KiB
YAML
#*******************************************************************************
|
|
# buidRelease.yml
|
|
#
|
|
# Workflow to build a Maiko release that is pushed to github.
|
|
# For linux: release assets are built/pushed for X86_64, aarch64 and arm7vl.
|
|
# For macOS: release assets are built/pushed for X86_64 and aarch64 as well as
|
|
# a set of universal binaries.
|
|
# For Windows: not supported
|
|
#
|
|
# Note release pushed to github automatically includes source code assets
|
|
# in tar and zip formats.
|
|
#
|
|
# 2022-01-16 by Frank Halasz based on earlier workflow called buildDocker.yml
|
|
# Updated 2023-06-06: Remove docker image push; increase build efficeincy for linux
|
|
#
|
|
# Copyright 2022-2023 by Interlisp.org
|
|
#
|
|
#
|
|
# ******************************************************************************
|
|
|
|
name: 'Build/Push Release'
|
|
|
|
# Run this workflow on ...
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
draft:
|
|
description: "Mark this as a draft release"
|
|
type: choice
|
|
options:
|
|
- 'false'
|
|
- 'true'
|
|
force:
|
|
description: "Force build even if build already successfully completed for this commit"
|
|
type: choice
|
|
options:
|
|
- 'false'
|
|
- 'true'
|
|
|
|
workflow_call:
|
|
secrets:
|
|
DOCKER_USERNAME:
|
|
required: true
|
|
DOCKER_PASSWORD:
|
|
required: true
|
|
outputs:
|
|
successful:
|
|
description: "'True' if maiko build completed successully"
|
|
value: ${{ jobs.complete.outputs.build_successful }}
|
|
inputs:
|
|
draft:
|
|
description: "Mark this as a draft release"
|
|
required: false
|
|
type: string
|
|
default: 'false'
|
|
force:
|
|
description: "Force build even if build already successfully completed for this commit"
|
|
required: false
|
|
type: string
|
|
default: 'false'
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
# 3 separate jobs here that can run in parallel
|
|
#
|
|
# 1. Linux: Build a multiplatform Linux Docker file system (not saved) and use
|
|
# results to build/push Linux release assets.
|
|
#
|
|
# 2. MacOs: Build maiko for MacOS (x86_64, aarch64, and universal) then create
|
|
# and push release assets.
|
|
#
|
|
# 3. Windows: Build maiko for cygwin and SDL (x86_64). Build is done within the
|
|
# cygwin-maiko-builder Docker image by building a new docker files system (and
|
|
# not a docker container) which is used to build/push Windows(cygwin) assets.
|
|
#
|
|
|
|
jobs:
|
|
|
|
######################################################################################
|
|
|
|
# Regularize the inputs so they can be referenced the same way whether they are
|
|
# the result of a workflow_dispatch or a workflow_call
|
|
|
|
inputs:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
draft: ${{ steps.one.outputs.draft }}
|
|
force: ${{ steps.one.outputs.force }}
|
|
linux: ${{ steps.one.outputs.linux }}
|
|
macos: ${{ steps.one.outputs.macos }}
|
|
windows: ${{ steps.one.outputs.windows }}
|
|
steps:
|
|
- id: one
|
|
run: >
|
|
if [ '${{ toJSON(inputs) }}' = 'null' ];
|
|
then
|
|
echo "workflow_dispatch";
|
|
echo "draft=${{ github.event.inputs.draft }}" >> $GITHUB_OUTPUT;
|
|
echo "force=${{ github.event.inputs.force }}" >> $GITHUB_OUTPUT;
|
|
else
|
|
echo "workflow_call";
|
|
echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT;
|
|
echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT;
|
|
fi;
|
|
echo "linux=true" >> $GITHUB_OUTPUT;
|
|
echo "macos=true" >> $GITHUB_OUTPUT;
|
|
echo "windows=true" >> $GITHUB_OUTPUT;
|
|
|
|
|
|
######################################################################################
|
|
|
|
# Use sentry-action to determine if this release has already been built
|
|
# based on the latest commit to the repo
|
|
|
|
sentry:
|
|
needs: inputs
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
|
|
|
steps:
|
|
# Checkout the actions for this repo owner
|
|
- name: Checkout Actions
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: ${{ github.repository_owner }}/.github
|
|
path: ./Actions_${{ github.sha }}
|
|
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
|
|
|
# Check if build already run for this commit
|
|
- name: Build already completed?
|
|
id: check
|
|
continue-on-error: true
|
|
uses: ./../actions/check-sentry-action
|
|
with:
|
|
tag: "release_docker"
|
|
|
|
|
|
######################################################################################
|
|
|
|
# Emscripten: build and push Maiko compiled for Emscripten (to run Maiko in browser)
|
|
|
|
emscripten:
|
|
|
|
needs: [inputs, sentry]
|
|
if: |
|
|
needs.inputs.outputs.linux == 'true'
|
|
&& (
|
|
needs.sentry.outputs.release_not_built == 'true'
|
|
|| needs.inputs.outputs.force == 'true'
|
|
)
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
# Checkout the actions for this repo owner
|
|
- name: Checkout Actions
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: ${{ github.repository_owner }}/.github
|
|
path: ./Actions_${{ github.sha }}
|
|
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
|
|
|
# Install SDL2
|
|
- name: Install SDL2
|
|
run: |
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
sudo -E apt-get install -y libsdl2-dev libsdl2-2.0-0
|
|
|
|
# Install Emscripten SDK
|
|
- name: Install Empscripten
|
|
working-directory: ../
|
|
run: |
|
|
git clone https://github.com/emscripten-core/emsdk.git
|
|
cd emsdk
|
|
./emsdk install latest
|
|
./emsdk activate latest
|
|
CWD="$(pwd)"
|
|
source "${CWD}/emsdk_env.sh"
|
|
export PATH="${CWD}/upstream/emscripten/tools:\${PATH}"
|
|
echo "PATH=${PATH}" >> ${GITHUB_ENV}
|
|
|
|
# Checkout the maiko branch
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
# Setup release tag
|
|
- name: Setup Release Tag
|
|
id: tag
|
|
uses: ./../actions/release-tag-action
|
|
|
|
# Compile maiko using Emscripten (no load build)
|
|
- name: Compile Maiko using Emscripten
|
|
working-directory: ./bin
|
|
run: |
|
|
./makeright wasm_nl
|
|
tar -c -z -C ../emscripten.wasm_nl -f ../${{ steps.tag.outputs.release_tag }}-emscripten.tgz *
|
|
|
|
# Push Release to github
|
|
- name: Push the release
|
|
uses: ncipollo/release-action@v1
|
|
with:
|
|
allowUpdates: true
|
|
artifacts: ${{ steps.tag.outputs.release_tag }}-emscripten.tgz
|
|
tag: ${{ steps.tag.outputs.release_tag }}
|
|
draft: ${{ needs.inputs.outputs.draft }}
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
######################################################################################
|
|
|
|
# Use set-sentry-action to determine set the sentry that says this release has
|
|
# been successfully built
|
|
|
|
complete:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
outputs:
|
|
build_successful: ${{ steps.output.outputs.build_successful }}
|
|
|
|
needs: [inputs, sentry, emscripten]
|
|
|
|
steps:
|
|
# Checkout the actions for this repo owner
|
|
- name: Checkout Actions
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: ${{ github.repository_owner }}/.github
|
|
path: ./Actions_${{ github.sha }}
|
|
- run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }}
|
|
|
|
# Set sentry
|
|
- name: Is build for this commit already completed?
|
|
id: set
|
|
uses: ./../actions/set-sentry-action
|
|
with:
|
|
tag: "release_docker"
|
|
|
|
- name: Output
|
|
id: output
|
|
run: |
|
|
echo "build_successful=true" >> $GITHUB_OUTPUT
|
|
|
|
######################################################################################
|