mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-26 15:10:22 -05:00
101 lines
4.1 KiB
YAML
101 lines
4.1 KiB
YAML
name: Create Draft Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- '*'
|
|
|
|
permissions:
|
|
contents: write # create the GitHub Release
|
|
actions: read # read other workflow runs and download their artifacts
|
|
|
|
jobs:
|
|
draft-release:
|
|
name: Create draft release with binaries
|
|
runs-on: ubuntu-26.04
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
GH_REPO: ${{ github.repository }}
|
|
steps:
|
|
- name: Wait for builds and download artifacts
|
|
run: |
|
|
set -uo pipefail
|
|
sha='${{ github.sha }}'
|
|
|
|
# The Windows/Linux build (ResInsightWithCache.yml) and the macOS
|
|
# build (ResInsightMac.yml) are triggered by this same tag push.
|
|
# Poll until each run for this commit has completed, echoing its
|
|
# run id on success. Note: a build may conclude as 'failure' yet
|
|
# still have usable artifacts (e.g. the macOS unit tests, uploaded
|
|
# with if: always(); or the pypi-publish job failing on a fork), so
|
|
# we wait on completion regardless of conclusion.
|
|
wait_run() {
|
|
wf="$1"
|
|
echo "Waiting for $wf @ $sha" >&2
|
|
for i in $(seq 1 240); do # up to ~2h (240 * 30s)
|
|
row=$(gh run list --workflow "$wf" \
|
|
--json headSha,status,databaseId --limit 50 \
|
|
| jq -r --arg sha "$sha" \
|
|
'map(select(.headSha==$sha)) | .[0]
|
|
| "\(.status // "none") \(.databaseId // "none")"')
|
|
st=${row%% *}; id=${row##* }
|
|
echo " $wf [$i]: status=$st id=$id" >&2
|
|
if [ "$st" = "completed" ]; then echo "$id"; return 0; fi
|
|
sleep 30
|
|
done
|
|
echo "Timed out waiting for $wf" >&2
|
|
return 1
|
|
}
|
|
|
|
cache_id=$(wait_run ResInsightWithCache.yml)
|
|
mac_id=$(wait_run ResInsightMac.yml)
|
|
rhel8_id=$(wait_run rhel8-package.yml)
|
|
|
|
mkdir -p artifacts
|
|
# Windows, Ubuntu-gcc and Ubuntu-clang-19 (excludes python-distribution).
|
|
gh run download "$cache_id" --pattern 'ResInsight-*' --dir artifacts
|
|
# Use --pattern (not --name) so each artifact is placed in its own
|
|
# ResInsight-macOS-*/ subdirectory, matching the cache download above.
|
|
# With --name the contents are extracted flat into artifacts/, which
|
|
# the 'for d in ResInsight-*/' packaging loop would then skip.
|
|
# The glob matches both macOS architectures (arm64 and x64), each
|
|
# uploaded as a separate artifact by ResInsightMac.yml (issue #1009).
|
|
gh run download "$mac_id" --pattern 'ResInsight-macOS-*' --dir artifacts
|
|
ls -R artifacts
|
|
|
|
# The RHEL8 artifact is already a CPack *.tar.gz, so keep it out of
|
|
# the 'artifacts/' zip loop below and attach it to the release as-is.
|
|
mkdir -p rhel8-package
|
|
gh run download "$rhel8_id" --pattern 'ResInsight-RHEL8' --dir rhel8-package
|
|
ls -R rhel8-package
|
|
|
|
- name: Package each platform into a zip
|
|
run: |
|
|
mkdir -p release-assets
|
|
cd artifacts
|
|
for d in ResInsight-*/; do
|
|
name="${d%/}"
|
|
# Spaces in artifact names (e.g. "ResInsight-Ubuntu 24.04 gcc")
|
|
# make awkward asset filenames, so collapse them to underscores.
|
|
safe="${name// /_}"
|
|
zip -r "../release-assets/${safe}-${{ github.ref_name }}.zip" "$name"
|
|
done
|
|
cd ..
|
|
# The RHEL8 CPack package is already compressed; attach it directly.
|
|
find rhel8-package -name '*.tar.gz' -exec cp {} release-assets/ \;
|
|
ls -l release-assets
|
|
|
|
- name: Create or update draft release
|
|
run: |
|
|
tag='${{ github.ref_name }}'
|
|
if gh release view "$tag" >/dev/null 2>&1; then
|
|
# Re-run: refresh the assets on the existing (draft) release.
|
|
gh release upload "$tag" release-assets/* --clobber
|
|
else
|
|
gh release create "$tag" \
|
|
--draft \
|
|
--title "ResInsight $tag" \
|
|
--notes "Automated draft release. Binaries are attached below." \
|
|
release-assets/*
|
|
fi
|