-
Notifications
You must be signed in to change notification settings - Fork 2
63 lines (63 loc) · 2.28 KB
/
Copy pathrelease-validate.yml
File metadata and controls
63 lines (63 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# SPDX-License-Identifier: Apache-2.0
name: Release Validate
on:
workflow_call:
inputs:
tag:
required: true
type: string
outputs:
version:
value: ${{ jobs.validate.outputs.version }}
is_prerelease:
value: ${{ jobs.validate.outputs.is_prerelease }}
source_sha:
value: ${{ jobs.validate.outputs.source_sha }}
python_version:
value: ${{ jobs.validate.outputs.python_version }}
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.contract.outputs.version }}
is_prerelease: ${{ steps.contract.outputs.is_prerelease }}
source_sha: ${{ steps.contract.outputs.source_sha }}
python_version: ${{ steps.contract.outputs.python_version }}
steps:
- uses: actions/checkout@v6
with:
path: validation-helper
- id: tag
name: Validate tag syntax with canonical helper
shell: bash
env:
TAG: ${{ inputs.tag }}
run: python3 validation-helper/scripts/release/version_contract.py validate-tag "$TAG" --github-output "$GITHUB_OUTPUT"
- uses: actions/checkout@v6
with:
ref: ${{ inputs.tag }}
fetch-depth: 0
path: tagged-source
- id: contract
name: Validate immutable tag and release contract
shell: bash
env:
TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
SHA="$(git -C tagged-source rev-parse --verify "refs/tags/${TAG}^{commit}")"
test "$SHA" = "$(git -C tagged-source rev-parse "HEAD^{commit}")"
STAGE="$(mktemp -d)"
STAMPED="$(mktemp -d)/stamped"
git -C tagged-source archive "$SHA" | tar -x -C "$STAGE"
VERSION="${TAG#v}"
python3 validation-helper/scripts/release/version_contract.py stamp "$VERSION" --source "$STAGE" --destination "$STAMPED"
python3 validation-helper/scripts/release/version_contract.py verify "$VERSION" --root "$STAMPED"
{
echo "version=${{ steps.tag.outputs.version }}"
echo "python_version=${{ steps.tag.outputs.python_version }}"
echo "is_prerelease=${{ steps.tag.outputs.is_prerelease }}"
echo "source_sha=$SHA"
} >> "$GITHUB_OUTPUT"