ci(macos): skip tests on tags containing "prerelease" #162
@@ -30,19 +30,25 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
echo "$line"
|
echo "$line"
|
||||||
|
|
||||||
|
# Tag pushes whose name contains "prerelease" skip the test build and both
|
||||||
|
# test legs: they exist to package a build already validated elsewhere.
|
||||||
|
# The job still succeeds quickly so `package`'s `needs:` stays satisfied.
|
||||||
# Homebrew's xcodegen formula requires Xcode 15.3, which cannot be
|
# Homebrew's xcodegen formula requires Xcode 15.3, which cannot be
|
||||||
# installed on macOS 12 (#109). The script installs a pinned
|
# installed on macOS 12 (#109). The script installs a pinned
|
||||||
# prebuilt release instead.
|
# prebuilt release instead.
|
||||||
- name: Ensure host tools
|
- name: Ensure host tools
|
||||||
|
if: "!(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: scripts/ensure-host-tools.sh
|
run: scripts/ensure-host-tools.sh
|
||||||
|
|
||||||
- name: Generate Xcode project
|
- name: Generate Xcode project
|
||||||
|
if: "!(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: xcodegen generate --spec project.yml
|
run: xcodegen generate --spec project.yml
|
||||||
|
|
||||||
# Tests only ever run on the runner's own architecture; build
|
# Tests only ever run on the runner's own architecture; build
|
||||||
# just that slice. Packaging (scripts/package-release.sh) still
|
# just that slice. Packaging (scripts/package-release.sh) still
|
||||||
# produces the universal Release binary.
|
# produces the universal Release binary.
|
||||||
- name: Build for testing (host arch)
|
- name: Build for testing (host arch)
|
||||||
|
if: "!(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: |
|
run: |
|
||||||
xcodebuild build-for-testing \
|
xcodebuild build-for-testing \
|
||||||
-scheme ICCery \
|
-scheme ICCery \
|
||||||
@@ -60,6 +66,7 @@ jobs:
|
|||||||
# launch (run 31992) — so sign every embedded copy once the build is
|
# launch (run 31992) — so sign every embedded copy once the build is
|
||||||
# done (embed steps run after any build script phase) (#119).
|
# done (embed steps run after any build script phase) (#119).
|
||||||
- name: Sign package product frameworks
|
- name: Sign package product frameworks
|
||||||
|
if: "!(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: |
|
run: |
|
||||||
find "$DERIVED/Build/Products/Debug" -depth -name '*_PackageProduct.framework' -print0 \
|
find "$DERIVED/Build/Products/Debug" -depth -name '*_PackageProduct.framework' -print0 \
|
||||||
| while IFS= read -r -d '' fw; do
|
| while IFS= read -r -d '' fw; do
|
||||||
@@ -68,6 +75,7 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
- name: Test unit (ICCeryCoreTests)
|
- name: Test unit (ICCeryCoreTests)
|
||||||
|
if: "!(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: |
|
run: |
|
||||||
XCTESTRUN="$(find "$DERIVED" -name 'ICCery*.xctestrun' | head -n 1)"
|
XCTESTRUN="$(find "$DERIVED" -name 'ICCery*.xctestrun' | head -n 1)"
|
||||||
if [ -z "$XCTESTRUN" ] || [ ! -f "$XCTESTRUN" ]; then
|
if [ -z "$XCTESTRUN" ] || [ ! -f "$XCTESTRUN" ]; then
|
||||||
@@ -90,6 +98,7 @@ jobs:
|
|||||||
# tag packaging can proceed. Real XCTest assertion failures
|
# tag packaging can proceed. Real XCTest assertion failures
|
||||||
# still fail the job.
|
# still fail the job.
|
||||||
- name: Test UI (ICCeryUITests)
|
- name: Test UI (ICCeryUITests)
|
||||||
|
if: "!(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: |
|
run: |
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
XCTESTRUN="$(find "$DERIVED" -name 'ICCery*.xctestrun' | head -n 1)"
|
XCTESTRUN="$(find "$DERIVED" -name 'ICCery*.xctestrun' | head -n 1)"
|
||||||
@@ -154,7 +163,7 @@ jobs:
|
|||||||
# xcresult on failure — upload it so UI failures can be triaged
|
# xcresult on failure — upload it so UI failures can be triaged
|
||||||
# without access to the runner (#126).
|
# without access to the runner (#126).
|
||||||
- name: Prepare Node CA bundle (failure path)
|
- name: Prepare Node CA bundle (failure path)
|
||||||
if: failure()
|
if: "failure() && !(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
run: |
|
run: |
|
||||||
NODE_CA_FILE="/tmp/macos-ca-bundle.pem"
|
NODE_CA_FILE="/tmp/macos-ca-bundle.pem"
|
||||||
security find-certificate -a -p \
|
security find-certificate -a -p \
|
||||||
@@ -166,7 +175,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upload UI test xcresult
|
- name: Upload UI test xcresult
|
||||||
if: failure()
|
if: "failure() && !(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'prerelease'))"
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
env:
|
env:
|
||||||
NODE_EXTRA_CA_CERTS: /tmp/macos-ca-bundle.pem
|
NODE_EXTRA_CA_CERTS: /tmp/macos-ca-bundle.pem
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ if [ -z "$TAG" ] || [ "$TAG" = "${GITHUB_REF:-}" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
case "$TAG" in
|
||||||
|
*prerelease*) PRERELEASE=true ;;
|
||||||
|
*) PRERELEASE=false ;;
|
||||||
|
esac
|
||||||
|
|
||||||
DMG="${1:-}"
|
DMG="${1:-}"
|
||||||
if [ -z "$DMG" ]; then
|
if [ -z "$DMG" ]; then
|
||||||
DMG="$(ls -1 ICCery-*.dmg 2>/dev/null | head -n 1 || true)"
|
DMG="$(ls -1 ICCery-*.dmg 2>/dev/null | head -n 1 || true)"
|
||||||
@@ -49,12 +54,12 @@ STATUS="$(curl -sS -o "$BODY" -w '%{http_code}' \
|
|||||||
"$API/repos/$REPO/releases/tags/$TAG" || true)"
|
"$API/repos/$REPO/releases/tags/$TAG" || true)"
|
||||||
|
|
||||||
if [ "$STATUS" = "404" ]; then
|
if [ "$STATUS" = "404" ]; then
|
||||||
echo "==> Creating release $TAG"
|
echo "==> Creating release $TAG (prerelease=$PRERELEASE)"
|
||||||
STATUS="$(curl -sS -o "$BODY" -w '%{http_code}' \
|
STATUS="$(curl -sS -o "$BODY" -w '%{http_code}' \
|
||||||
-H "Authorization: token $TOKEN" \
|
-H "Authorization: token $TOKEN" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-X POST "$API/repos/$REPO/releases" \
|
-X POST "$API/repos/$REPO/releases" \
|
||||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"prerelease\":true,\"target_commitish\":\"${GITHUB_SHA:-}\"}")"
|
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"prerelease\":$PRERELEASE,\"target_commitish\":\"${GITHUB_SHA:-}\"}")"
|
||||||
fi
|
fi
|
||||||
if [ "$STATUS" != "200" ] && [ "$STATUS" != "201" ]; then
|
if [ "$STATUS" != "200" ] && [ "$STATUS" != "201" ]; then
|
||||||
echo "error: could not load/create release $TAG (HTTP $STATUS)" >&2
|
echo "error: could not load/create release $TAG (HTTP $STATUS)" >&2
|
||||||
|
|||||||
Reference in New Issue
Block a user