-
Notifications
You must be signed in to change notification settings - Fork 0
88 lines (78 loc) · 3.13 KB
/
Copy pathsync.yml
File metadata and controls
88 lines (78 loc) · 3.13 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
name: Sync release
on:
workflow_dispatch:
repository_dispatch:
types: [sync-release]
schedule:
- cron: '0 */6 * * *' # fallback poll every 6h in case a dispatch is missed
permissions:
id-token: write
contents: write
actions: write
attestations: write
env:
GH_TOKEN: ${{ github.token }}
SOURCE_REPO: 'AlirezaParsi/COPG'
MODULE_NAME: 'COPG'
jobs:
sync_latest:
runs-on: ubuntu-latest
steps:
- name: Resolve latest source release
id: latest
run: |
TAG=$(gh release view --repo "$SOURCE_REPO" --json tagName -q .tagName)
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
- name: Checkout
if: steps.latest.outputs.exists == 'false'
uses: actions/checkout@v5
- name: Pull latest artifact and fix line endings
if: steps.latest.outputs.exists == 'false'
run: |
TAG="${{ steps.latest.outputs.tag }}"
gh release download "$TAG" --repo "$SOURCE_REPO" --pattern "$MODULE_NAME*.zip" --dir ./dl
ZIP_FILE=$(ls ./dl/$MODULE_NAME*.zip | head -1)
python3 - "$ZIP_FILE" "$MODULE_NAME.zip" <<'PYEOF'
import sys, zipfile
src, dst = sys.argv[1], sys.argv[2]
with zipfile.ZipFile(src, 'r') as zin, \
zipfile.ZipFile(dst, 'w', zipfile.ZIP_DEFLATED) as zout:
for item in zin.infolist():
data = zin.read(item.filename)
if item.filename == 'module.prop':
data = data.replace(b'\r\n', b'\n').replace(b'\r', b'\n')
zout.writestr(item, data)
PYEOF
BODY=$(gh release view "$TAG" --repo "$SOURCE_REPO" --json body -q .body)
echo "RELEASE_BODY<<EOF" >> "$GITHUB_ENV"
echo "$BODY" >> "$GITHUB_ENV"
echo "EOF" >> "$GITHUB_ENV"
- name: Create Release
if: steps.latest.outputs.exists == 'false'
uses: KernelSU-Modules-Repo/module_release@main
with:
tag_name: ${{ steps.latest.outputs.tag }}
make_latest: true
file: "${{ env.MODULE_NAME }}.zip"
body: ${{ env.RELEASE_BODY }}
generate_release_notes: false
- uses: actions/attest-build-provenance@v2
if: steps.latest.outputs.exists == 'false'
with:
subject-path: "${{ env.MODULE_NAME }}.zip"
- name: Prune to latest only
run: |
KEEP="${{ steps.latest.outputs.tag }}"
# safety: never prune unless the latest release is actually present
gh release view "$KEEP" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1 || { echo "latest not present, skip prune"; exit 0; }
for t in $(gh release list --repo "$GITHUB_REPOSITORY" --json tagName -q '.[].tagName'); do
if [ "$t" != "$KEEP" ]; then
echo "deleting old release/tag $t"
gh release delete "$t" --repo "$GITHUB_REPOSITORY" --yes --cleanup-tag || true
fi
done