forked from NeuralNomadsAI/CodeNomad
-
Notifications
You must be signed in to change notification settings - Fork 0
151 lines (133 loc) · 5.73 KB
/
Copy pathupdate-winget.yml
File metadata and controls
151 lines (133 loc) · 5.73 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: Update Winget
on:
workflow_call:
inputs:
release_tag:
description: "Stable release tag to inspect"
required: true
type: string
release_id:
description: "Optional numeric GitHub release id"
required: false
default: ""
type: string
workflow_dispatch:
inputs:
release_tag:
description: "Stable release tag to inspect"
required: true
type: string
release_id:
description: "Optional numeric GitHub release id"
required: false
default: ""
type: string
permissions:
contents: read
jobs:
resolve-release:
name: Resolve release metadata
runs-on: ubuntu-latest
outputs:
release_id: ${{ steps.release.outputs.release_id }}
release_tag: ${{ steps.release.outputs.release_tag }}
draft: ${{ steps.release.outputs.draft }}
prerelease: ${{ steps.release.outputs.prerelease }}
steps:
- name: Resolve release metadata
id: release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ inputs.release_tag }}
RELEASE_ID_INPUT: ${{ inputs.release_id }}
run: |
set -euo pipefail
if [ -n "$RELEASE_ID_INPUT" ]; then
release_api="repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID_INPUT}"
else
release_api="repos/${GITHUB_REPOSITORY}/releases/tags/${RELEASE_TAG}"
fi
release_id="$(gh api "$release_api" --jq '.id')"
release_tag="$(gh api "$release_api" --jq '.tag_name')"
draft="$(gh api "$release_api" --jq '.draft')"
prerelease="$(gh api "$release_api" --jq '.prerelease')"
if [ -z "$release_id" ] || [ "$release_id" = "null" ]; then
echo "Unable to resolve release id for tag '$RELEASE_TAG'" >&2
exit 1
fi
echo "release_id=$release_id" >> "$GITHUB_OUTPUT"
echo "release_tag=$release_tag" >> "$GITHUB_OUTPUT"
echo "draft=$draft" >> "$GITHUB_OUTPUT"
echo "prerelease=$prerelease" >> "$GITHUB_OUTPUT"
- name: Log resolved release metadata
run: |
echo "Release tag: ${{ steps.release.outputs.release_tag }}"
echo "Release id: ${{ steps.release.outputs.release_id }}"
echo "Draft: ${{ steps.release.outputs.draft }}"
echo "Prerelease: ${{ steps.release.outputs.prerelease }}"
update-winget:
name: Submit Winget manifest update
needs: resolve-release
if: ${{ needs.resolve-release.outputs.draft != 'true' && needs.resolve-release.outputs.prerelease != 'true' }}
runs-on: ubuntu-latest
env:
WINGET_PACKAGE_IDENTIFIER: ${{ vars.WINGET_PACKAGE_IDENTIFIER || 'NeuralNomadsAI.CodeNomad' }}
WINGET_FORK_OWNER: ${{ vars.WINGET_FORK_OWNER || 'pascalandr' }}
WINGET_WINDOWS_ASSET_NAME_TEMPLATE: ${{ vars.WINGET_WINDOWS_ASSET_NAME_TEMPLATE || 'CodeNomad-Tauri-windows-x64-{version}.zip' }}
WINGET_ASSET_WAIT_TIMEOUT_SECONDS: ${{ vars.WINGET_ASSET_WAIT_TIMEOUT_SECONDS || '900' }}
WINGET_ASSET_POLL_INTERVAL_SECONDS: ${{ vars.WINGET_ASSET_POLL_INTERVAL_SECONDS || '15' }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Wait for Windows Tauri release asset
id: release_asset
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
args=(
--repo "${{ github.repository }}"
--release-id "${{ needs.resolve-release.outputs.release_id }}"
--tag "${{ needs.resolve-release.outputs.release_tag }}"
--asset-name-template "$WINGET_WINDOWS_ASSET_NAME_TEMPLATE"
--timeout-seconds "$WINGET_ASSET_WAIT_TIMEOUT_SECONDS"
--poll-interval-seconds "$WINGET_ASSET_POLL_INTERVAL_SECONDS"
--github-output "$GITHUB_OUTPUT"
)
node scripts/winget/resolve-release-asset.cjs "${args[@]}"
- name: Log resolved Winget asset metadata
run: |
echo "Resolved asset: ${{ steps.release_asset.outputs.asset_name }}"
echo "Resolved version: ${{ steps.release_asset.outputs.version }}"
echo "Resolved SHA-256: ${{ steps.release_asset.outputs.asset_sha256 }}"
- name: Validate fork configuration
env:
GH_TOKEN: ${{ secrets.WINGET_GITHUB_TOKEN }}
EXPECTED_OWNER: ${{ env.WINGET_FORK_OWNER }}
run: |
set -euo pipefail
token_owner="$(gh api user --jq '.login')"
fork_name="$(gh api "repos/$EXPECTED_OWNER/winget-pkgs" --jq '.full_name')"
parent_name="$(gh api "repos/$EXPECTED_OWNER/winget-pkgs" --jq '.parent.full_name')"
is_fork="$(gh api "repos/$EXPECTED_OWNER/winget-pkgs" --jq '.fork')"
if [ "$token_owner" != "$EXPECTED_OWNER" ]; then
echo "WINGET_GITHUB_TOKEN belongs to '$token_owner' but WINGET_FORK_OWNER is '$EXPECTED_OWNER'" >&2
exit 1
fi
if [ "$is_fork" != "true" ] || [ "$parent_name" != "microsoft/winget-pkgs" ]; then
echo "Configured fork must be $EXPECTED_OWNER/winget-pkgs forked from microsoft/winget-pkgs" >&2
exit 1
fi
echo "Validated fork: $fork_name"
- name: Submit update to Winget
uses: vedantmgoyal9/winget-releaser@v2
with:
identifier: ${{ env.WINGET_PACKAGE_IDENTIFIER }}
version: ${{ steps.release_asset.outputs.version }}
release-tag: ${{ needs.resolve-release.outputs.release_tag }}
installers-regex: ${{ steps.release_asset.outputs.asset_regex }}
fork-user: ${{ env.WINGET_FORK_OWNER }}
token: ${{ secrets.WINGET_GITHUB_TOKEN }}