|
1 | 1 | name: Turn Pre-release into Release
|
2 | 2 | on:
|
| 3 | + release: |
| 4 | + types: |
| 5 | + - published |
3 | 6 | push:
|
4 | 7 | branches:
|
5 | 8 | - main
|
| 9 | + tags: |
| 10 | + - v* |
6 | 11 |
|
7 | 12 | jobs:
|
8 |
| - check: |
9 |
| - name: Check if latest tag's release is pre-release |
| 13 | + find: |
| 14 | + name: Find release |
10 | 15 | runs-on: ubuntu-latest
|
| 16 | + outputs: |
| 17 | + id: ${{ steps.final_step.outputs.release_id }} |
| 18 | + tag: ${{ steps.final_step.outputs.tag_name }} |
| 19 | + url: ${{ steps.final_step.outputs.url }} |
11 | 20 | steps:
|
12 |
| - - name: Checkout code |
13 |
| - uses: actions/checkout@v2 |
| 21 | + - name: Checkout main branch |
| 22 | + uses: actions/checkout@v3 |
| 23 | + with: |
| 24 | + ref: main |
14 | 25 | - name: Get releases
|
15 |
| - run: curl "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases" -o releases.json |
16 |
| - - name: Check if $(cat binary_version) is a pre-release |
| 26 | + run: curl --no-progress-meter "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases" -o releases.json |
| 27 | + - name: Find release corresponding to the $(cat binary_version) tag |
| 28 | + id: final_step |
17 | 29 | run: |
|
18 |
| - python <<EOF |
19 |
| - import json |
20 |
| - import sys |
21 |
| - with open('releases.json') as file: |
22 |
| - releases = json.loads(file.read()) |
23 |
| - with open('binary_version') as file: |
24 |
| - version = file.read().strip() |
25 |
| - for release in releases: |
26 |
| - if release["tag_name"] == version: |
27 |
| - if release["prerelease"]: |
28 |
| - print(f"{release['tag_name']} is a Pre-release") |
29 |
| - sys.exit(1) |
30 |
| - else: |
31 |
| - print(f"{release['tag_name']} is a Release") |
32 |
| - sys.exit(0) |
33 |
| - else: |
34 |
| - print(f"{version} release not found") |
35 |
| - EOF |
36 |
| - convert: |
37 |
| - needs: check |
38 |
| - if: ${{ !success() || cancelled() }} |
39 |
| - name: Convert pre-release to release |
| 30 | + jq ".[] | select(.tag_name == \"$(cat binary_version)\") | ." <releases.json >release.json |
| 31 | + jq <release.json -r .tag_name |
| 32 | + jq <release.json -r .id |
| 33 | + jq <release.json -r .url |
| 34 | + echo "::set-output name=tag_name::$(jq <release.json -r .tag_name)" |
| 35 | + echo "::set-output name=release_id::$(jq <release.json -r .id)" |
| 36 | + echo "::set-output name=url::$(jq <release.json -r .url)" |
| 37 | + check: |
| 38 | + name: Check if pre-release |
40 | 39 | runs-on: ubuntu-latest
|
| 40 | + needs: find |
| 41 | + outputs: |
| 42 | + prerelease: ${{ steps.check.outputs.prerelease }} |
41 | 43 | steps:
|
42 |
| - - name: Checkout code |
43 |
| - uses: actions/checkout@v2 |
44 |
| - - name: Get releases |
| 44 | + - name: Get release info |
| 45 | + run: curl ${{ needs.find.outputs.url }} -o release.json |
| 46 | + - id: check |
| 47 | + name: Check if pre-release |
45 | 48 | run: |
|
46 |
| - curl "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases" -o releases.json |
47 |
| - cat releases.json |
48 |
| - - name: Find release id |
49 |
| - run: | |
50 |
| - python <<EOF |
51 |
| - import json |
52 |
| - import sys |
53 |
| - with open('releases.json') as file: |
54 |
| - releases = json.loads(file.read()) |
55 |
| - with open('binary_version') as file: |
56 |
| - version = file.read().strip() |
57 |
| - for release in releases: |
58 |
| - if release["tag_name"] == version: |
59 |
| - print(release["id"]) |
60 |
| - with open('release_id', 'w') as file: |
61 |
| - file.write(f"{release['id']}") |
62 |
| - EOF |
63 |
| - - name: Convert |
| 49 | + jq .prerelease release.json |
| 50 | + echo "::set-output name=prerelease::$(jq .prerelease release.json)" |
| 51 | + convert: |
| 52 | + needs: [find, check] |
| 53 | + if: ${{ needs.check.outputs.prerelease }} |
| 54 | + runs-on: ubuntu-latest |
| 55 | + name: Convert pre-release to release |
| 56 | + steps: |
| 57 | + - name: Convert to release |
64 | 58 | env:
|
65 | 59 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
66 | 60 | run: |
|
67 |
| - cat release_id |
68 |
| - curl -H "Authorization: token $GITHUB_TOKEN" \ |
69 |
| - -H "Accept: application/vnd.github.v3+json" \ |
| 61 | + curl --no-progress-meter \ |
70 | 62 | -X 'PATCH' \
|
71 | 63 | -d '{"prerelease":false}' \
|
72 |
| - "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases/$(cat release_id)" 2>/dev/null |
| 64 | + -H 'Accept: application/vnd.github.v3+json' \ |
| 65 | + -H "Authorization: token $GITHUB_TOKEN" \ |
| 66 | + ${{ needs.find.outputs.url }} |
73 | 67 |
|
0 commit comments