Build release artifacts #1888
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: Build release artifacts | |
on: | |
# Picking a workflow branch that is a tag, in combination with using the commit field is likely to fail for magic git clone/checkout reasons | |
workflow_dispatch: | |
inputs: | |
packages: | |
description: 'List of packages to build' | |
required: true | |
default: 'everything' | |
type: choice | |
options: | |
- everything | |
- archive | |
- msvc | |
- installer | |
- sharedlib | |
commit: | |
description: 'Commit-ish (tag, branchname, sha) for code to build (uses scripts from the same branch as the workflow)' | |
default: '' | |
schedule: | |
- cron: '15 09 * * *' # Run in the early hours of the morning (UTC) | |
release: | |
types: published | |
jobs: | |
##################################### | |
# Create all submodules archive | |
##################################### | |
create-all-submodule-archive: | |
name: Create all submodule archive | |
runs-on: ubuntu-latest | |
if: (github.event.action == 'published') || (github.event_name == 'workflow_dispatch' && (contains(github.event.inputs.packages, 'archive') || contains(github.event.inputs.packages, 'everything'))) | |
steps: | |
- name: Determine fetch depth | |
id: determine_fd | |
shell: bash | |
run: | | |
unset DEPTH | |
if [ -n '${{ github.event.inputs.commit }}' ]; then DEPTH='0'; else DEPTH='1'; fi | |
echo "DEPTH=${DEPTH}" >> $GITHUB_OUTPUT | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: ${{ steps.determine_fd.outputs.DEPTH }} | |
if: github.event.action == 'published' || github.event_name == 'workflow_dispatch' | |
- name: Checkout shell scripts for workflow | |
shell: bash | |
if: github.event_name == 'workflow_dispatch' && github.event.inputs.commit | |
run: | | |
git checkout ${{ github.event.inputs.commit }} | |
git checkout ${{ github.ref_name }} -- scripts/_git-all-archive.sh || exit $? | |
for i in $(git status --short | cut -f2 -d " "); do sha256sum $i; done | |
exit 0 | |
- name: Create archive | |
if: github.event_name != 'workflow_dispatch' | |
# Creates the archive then moves it to an artifact subfolder | |
run: ./scripts/_git-all-archive.sh -l "$(git rev-parse --abbrev-ref "${GITHUB_REF}")" && mkdir artifact && mv "Helics-$(git rev-parse --abbrev-ref "${GITHUB_REF}")-source.tar.gz" artifact/ | |
- name: Create archive (no version) | |
if: github.event_name == 'workflow_dispatch' | |
# Creates the archive then moves it to an artifact subfolder | |
run: ./scripts/_git-all-archive.sh && mkdir artifact && mv "Helics-source.tar.gz" artifact/ | |
- name: Upload archive to release | |
if: github.event_name != 'workflow_dispatch' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
UPLOAD_URL: ${{ github.event.release.upload_url }} | |
run: ./.github/actions/upload-release-asset.sh "artifact/Helics-$(git rev-parse --abbrev-ref "${GITHUB_REF}")-source.tar.gz" | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: all-submodules-archive | |
path: artifact | |
##################################### | |
# Build MSVC archives | |
##################################### | |
build-windows-msvc: | |
runs-on: ${{ matrix.os }} | |
if: (github.event_name != 'workflow_dispatch') || (contains(github.event.inputs.packages, 'msvc') || contains(github.event.inputs.packages, 'everything')) | |
strategy: | |
matrix: | |
os: [windows-2019, windows-2022] | |
arch: [x64] | |
include: | |
- os: windows-2019 | |
cmake_gen: 'Visual Studio 16 2019' | |
msvc_ver: 'msvc2019' | |
- os: windows-2022 | |
cmake_gen: 'Visual Studio 17 2022' | |
msvc_ver: 'msvc2022' | |
steps: | |
- name: Determine fetch depth | |
id: determine_fd | |
shell: bash | |
run: | | |
unset DEPTH | |
if [ -n '${{ github.event.inputs.commit }}' ]; then DEPTH='0'; else DEPTH='1'; fi | |
echo "DEPTH=${DEPTH}" >> $GITHUB_OUTPUT | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: ${{ steps.determine_fd.outputs.DEPTH }} | |
if: github.event_name != 'schedule' | |
- name: Checkout develop branch | |
uses: actions/checkout@v4 | |
with: | |
ref: develop | |
if: github.event_name == 'schedule' | |
- name: Checkout shell scripts for workflow | |
shell: bash | |
if: github.event_name == 'workflow_dispatch' && github.event.inputs.commit | |
run: | | |
git checkout ${{ github.event.inputs.commit }} | |
git checkout ${{ github.ref_name }} -- .github/actions/ || exit $? | |
for i in $(git status --short | cut -f2 -d " "); do sha256sum $i; done | |
exit 0 | |
# Compile HELICS and create the installer | |
- name: Build installer | |
env: | |
BUILD_ARCH: ${{ matrix.arch }} | |
BUILD_GEN: ${{ matrix.cmake_gen }} | |
MSVC_VER: ${{ matrix.msvc_ver }} | |
shell: bash | |
run: ./.github/actions/release-build/msvc-${{ runner.os }}.sh | |
- name: Upload installer to release | |
if: github.event.action == 'published' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
UPLOAD_URL: ${{ github.event.release.upload_url }} | |
shell: bash | |
run: ./.github/actions/upload-release-asset.sh "$(ls artifact/Helics-*.zip)" | |
# GitHub Actions combines artifacts uploaded with the same name | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.os }}-msvc-installers | |
path: artifact | |
##################################### | |
# Build installers | |
##################################### | |
build-installers: | |
runs-on: ${{ matrix.os }} | |
name: Build ${{ matrix.os }} ${{ matrix.arch }} ${{ matrix.cpack_gen }} Installer | |
if: (github.event_name != 'workflow_dispatch') || (contains(github.event.inputs.packages, 'installer') || contains(github.event.inputs.packages, 'everything')) | |
strategy: | |
matrix: | |
id: [windows-x64, windows-x86, macos-x64, linux-x64] | |
include: | |
- id: windows-x64 | |
os: windows-2019 | |
arch: x64 | |
cpack_gen: NSIS;ZIP | |
cmake_gen: 'Visual Studio 16 2019' | |
msvc_ver: 'msvc2019' | |
- id: windows-x86 | |
os: windows-2019 | |
arch: x86 | |
cpack_gen: ZIP | |
cmake_gen: 'Visual Studio 16 2019' | |
msvc_ver: 'msvc2019' | |
- id: macos-x64 | |
os: macos-latest | |
arch: x64 | |
cpack_gen: ZIP | |
macos_target_ver: '10.15' | |
- id: linux-x64 | |
os: ubuntu-latest | |
arch: x64 | |
cpack_gen: TGZ | |
steps: | |
- name: Determine fetch depth | |
id: determine_fd | |
shell: bash | |
run: | | |
unset DEPTH | |
if [ -n '${{ github.event.inputs.commit }}' ]; then DEPTH='0'; else DEPTH='1'; fi | |
echo "DEPTH=${DEPTH}" >> $GITHUB_OUTPUT | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: ${{ steps.determine_fd.outputs.DEPTH }} | |
if: github.event_name != 'schedule' | |
- name: Checkout develop branch | |
uses: actions/checkout@v4 | |
with: | |
ref: develop | |
if: github.event_name == 'schedule' | |
- name: Checkout shell scripts for workflow | |
shell: bash | |
if: github.event_name == 'workflow_dispatch' && github.event.inputs.commit | |
run: | | |
git checkout ${{ github.event.inputs.commit }} | |
git checkout ${{ github.ref_name }} -- .github/actions/ || exit $? | |
for i in $(git status --short | cut -f2 -d " "); do sha256sum $i; done | |
exit 0 | |
# Setup a copy of the macOS SDK | |
- name: Setup macOS SDK | |
if: runner.os == 'macOS' | |
env: | |
MACOS_SDK_VER: ${{ matrix.macos_target_ver }} | |
run: ./.github/actions/setup-macos-sdk.sh | |
# Compile HELICS and create the installer | |
- name: Build installer | |
if: runner.os != 'Linux' | |
env: | |
BUILD_ARCH: ${{ matrix.arch }} | |
BUILD_GEN: ${{ matrix.cmake_gen }} | |
MSVC_VER: ${{ matrix.msvc_ver }} | |
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.macos_target_ver }} | |
CPACK_GEN: ${{ matrix.cpack_gen }} | |
shell: bash | |
run: ./.github/actions/release-build/installer-${{ runner.os }}.sh | |
- name: Build installer (container) | |
if: runner.os == 'Linux' | |
uses: ./.github/actions/linux-release-builder | |
with: | |
script: ./.github/actions/release-build/installer-${{ runner.os }}.sh | |
- name: Upload installer to release | |
if: github.event.action == 'published' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
UPLOAD_URL: ${{ github.event.release.upload_url }} | |
shell: bash | |
run: for filename in artifact/Helics-*; do ./.github/actions/upload-release-asset.sh "${filename}"; done | |
# GitHub Actions combines artifacts uploaded with the same name | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.id }}-installers | |
path: artifact | |
##################################### | |
# Build shared libraries | |
##################################### | |
build-sharedlibs: | |
runs-on: ${{ matrix.os }} | |
if: (github.event_name != 'workflow_dispatch') || (contains(github.event.inputs.packages, 'sharedlib') || contains(github.event.inputs.packages, 'everything')) | |
name: Build ${{ matrix.os }} ${{ matrix.arch }} Shared Library | |
strategy: | |
matrix: | |
id: [windows-x86, windows-x64, macos-x64, ubuntu-x64] | |
include: | |
- id: windows-x86 | |
os: windows-2019 | |
arch: x86 | |
cmake_gen: 'Visual Studio 16 2019' | |
msvc_ver: 'msvc2019' | |
- id: windows-x64 | |
os: windows-2019 | |
arch: x64 | |
cmake_gen: 'Visual Studio 16 2019' | |
msvc_ver: 'msvc2019' | |
- id: macos-x64 | |
os: macos-latest | |
arch: x64 | |
macos_target_ver: '10.15' | |
- id: ubuntu-x64 | |
os: ubuntu-latest | |
arch: x64 | |
steps: | |
- name: Determine fetch depth | |
id: determine_fd | |
shell: bash | |
run: | | |
unset DEPTH | |
if [ -n '${{ github.event.inputs.commit }}' ]; then DEPTH='0'; else DEPTH='1'; fi | |
echo "DEPTH=${DEPTH}" >> $GITHUB_OUTPUT | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: ${{ steps.determine_fd.outputs.DEPTH }} | |
if: github.event_name != 'schedule' | |
- name: Checkout develop branch | |
uses: actions/checkout@v4 | |
with: | |
ref: develop | |
if: github.event_name == 'schedule' | |
- name: Checkout shell scripts for workflow | |
shell: bash | |
if: github.event_name == 'workflow_dispatch' && github.event.inputs.commit | |
run: | | |
git checkout ${{ github.event.inputs.commit }} | |
git checkout ${{ github.ref_name }} -- .github/actions/ || exit $? | |
for i in $(git status --short | cut -f2 -d " "); do sha256sum $i; done | |
exit 0 | |
# Setup a copy of the macOS SDK | |
- name: Setup macOS SDK | |
if: runner.os == 'macOS' | |
env: | |
MACOS_SDK_VER: ${{ matrix.macos_target_ver }} | |
run: ./.github/actions/setup-macos-sdk.sh | |
# Compile HELICS and create the installer | |
- name: Build shared library | |
if: runner.os != 'Linux' | |
env: | |
BUILD_ARCH: ${{ matrix.arch }} | |
BUILD_GEN: ${{ matrix.cmake_gen }} | |
MSVC_VER: ${{ matrix.msvc_ver }} | |
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.macos_target_ver }} | |
shell: bash | |
run: ./.github/actions/release-build/shared-library-${{ runner.os }}.sh | |
- name: Build shared library (container) | |
if: runner.os == 'Linux' | |
uses: ./.github/actions/linux-release-builder | |
with: | |
script: ./.github/actions/release-build/shared-library-${{ runner.os }}.sh | |
- name: Upload installer to release | |
if: github.event.action == 'published' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
UPLOAD_URL: ${{ github.event.release.upload_url }} | |
shell: bash | |
run: ./.github/actions/upload-release-asset.sh "$(ls artifact/Helics-*)" | |
# GitHub Actions combines artifacts uploaded with the same name | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.id }}-sharedlib-installers | |
path: artifact | |
##################################### | |
# Generate SHA-256 file | |
##################################### | |
generate-sha256: | |
name: Calculate SHA256 for release assets | |
needs: [create-all-submodule-archive, build-installers, build-sharedlibs, build-windows-msvc] | |
runs-on: ubuntu-latest | |
if: github.event.action == 'published' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
merge-multiple: true | |
- name: Create SHA-256 file | |
run: cd artifacts && sha256sum * > "Helics-$(git rev-parse --abbrev-ref "${GITHUB_REF}")-SHA-256.txt" | |
- name: Upload SHA-256 file to release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
UPLOAD_URL: ${{ github.event.release.upload_url }} | |
run: ./.github/actions/upload-release-asset.sh "artifacts/Helics-$(git rev-parse --abbrev-ref "${GITHUB_REF}")-SHA-256.txt" | |
##################################### | |
# Trigger helics-packaging workflows | |
##################################### | |
send-version-update-event: | |
name: Trigger helics-packaging workflows | |
needs: [generate-sha256] | |
runs-on: ubuntu-latest | |
if: github.event.action == 'published' | |
steps: | |
- name: Run helics_version_update workflow in helics-packaging | |
env: | |
GH_TOKEN: ${{ secrets.HELICS_PACKAGING_TOKEN }} | |
run: | | |
HELICS_VERSION="${{ github.event.release.tag_name }}" | |
gh workflow run --repo GMLC-TDC/helics-packaging helics_version_update.yml -f version="${HELICS_VERSION#v}" |