Skip to content

Build release artifacts #1829

Build release artifacts

Build release artifacts #1829

Workflow file for this run

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}"