refactor: Putting fail-fast
ans an input param
#4
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: Lazarus Build Workflow | ||
defaults: | ||
run: | ||
shell: bash | ||
on: | ||
workflow_call: | ||
inputs: | ||
config: | ||
description: A JSON object containing configuration values | ||
required: true | ||
type: string | ||
fail-fast: | ||
description: Fail Fast on the jobs | ||
required: true | ||
type: bool | ||
outputs: | ||
win-artefact-path: | ||
description: Path to the stored artefact folder | ||
value: ${{ jobs.build-app.outputs.win-artefact-path }} | ||
lin-artefact-path: | ||
description: Path to the stored artefact folder | ||
value: ${{ jobs.build-app.outputs.lin-artefact-path }} | ||
osx-artefact-path: | ||
description: Path to the stored artefact folder | ||
value: ${{ jobs.build-app.outputs.osx-artefact-path }} | ||
jobs: | ||
strategy: | ||
fail-fast: ${{ fromJSON(inputs.config).fail-fast }} | ||
build-app: | ||
name: build [${{ matrix.os }}] [${{ matrix.lazarus-versions }}] | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
_EXE_: ${{ | ||
matrix.os == 'windows-latest' && | ||
format('{0}.exe', fromJSON(inputs.config).app-name) || | ||
fromJSON(inputs.config).app-name | ||
}} | ||
# _EXE_TRIPLET_: ${{ | ||
# matrix.os == 'windows-latest' && | ||
# format('{0}-{1}.exe', fromJSON(inputs.config).app-name, matrix.triplet) || | ||
# format('{0}-{1}', fromJSON(inputs.config).app-name, matrix.triplet) | ||
# }} | ||
strategy: | ||
matrix: ${{ fromJSON(inputs.config).matrix }} | ||
outputs: | ||
win-artefact-path: ${{ steps.vars.outputs.win-artefact-path }} | ||
lin-artefact-path: ${{ steps.vars.outputs.lin-artefact-path }} | ||
osx-artefact-path: ${{ steps.vars.outputs.osx-artefact-path }} | ||
steps: | ||
- name: Build env from inputs.config | ||
run: | | ||
( | ||
echo "app-name=${{ fromJSON(inputs.config).app-name }}" | ||
echo "lpi-path=${{ fromJSON(inputs.config).lpi-path }}" | ||
echo "bin-path=${{ fromJSON(inputs.config).bin-path }}" | ||
echo "build-mode=${{ fromJSON(inputs.config).build-mode }}" | ||
echo "lazarus-packages=${{ fromJSON(inputs.config).lazarus-packages }}" | ||
) >> "$GITHUB_ENV" | ||
- name: Checkout Repository | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
submodules: true | ||
- name: Install Lazarus | ||
uses: gcarreno/setup-lazarus@v3 | ||
with: | ||
lazarus-version: ${{ matrix.lazarus-versions }} | ||
include-packages: "${{ env.lazarus-packages }}" | ||
with-cache: false | ||
- name: Build the Main App | ||
run: lazbuild -B --bm="${{ env.build-mode }}" "${{ env.lpi-path }}/${{ env.app-name }}.lpi" | ||
- name: Upload binary | ||
if: ${{ matrix.lazarus-versions == 'stable' }} | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ env.app-name }}-${{ matrix.triplet }} | ||
path: ${{env.bin-path}}/${{ env._EXE_ }} | ||
# - name: Print some values | ||
# run: | | ||
# echo Config: ${{ inputs.config }} | ||
# echo App Name: ${{ env.app-name }} | ||
# echo LPI Path: ${{ env.lpi-path }}/${{ env.app-name }}.lpi | ||
# echo BIN Path: ${{ env.bin-path }}/${{ env._EXE_ }} | ||
# echo BIN Triplet Path: ${{ env.bin-path }}/${{ env._EXE_TRIPLET_ }} | ||
# echo Matrix OS: ${{ matrix.os }} | ||
# echo Executable: ${{ env._EXE_ }} | ||
# echo Executable with triplet: ${{ env._EXE_TRIPLET_ }} | ||
- name: Build outputs | ||
id: vars | ||
run: | | ||
( | ||
case "${{ matrix.os }}" in | ||
"windows-latest") | ||
echo "win-artefact-path=${{ env.app-name }}-${{ matrix.triplet }}" | ||
;; | ||
"ubuntu-latest") | ||
echo "lin-artefact-path=${{ env.app-name }}-${{ matrix.triplet }}" | ||
;; | ||
"macos-latest") | ||
echo "osx-artefact-path=${{ env.app-name }}-${{ matrix.triplet }}" | ||
;; | ||
esac | ||
) >> "$GITHUB_OUTPUT" | ||
# - name: Print outputs | ||
# run: | | ||
# echo Win output: ${{ steps.vars.outputs.win-artefact-path }} | ||
# echo Lin output: ${{ steps.vars.outputs.lin-artefact-path }} | ||
# echo OSX output: ${{ steps.vars.outputs.osx-artefact-path }} |