-
-
Notifications
You must be signed in to change notification settings - Fork 4k
154 lines (149 loc) · 5.84 KB
/
package_updates.yml
File metadata and controls
154 lines (149 loc) · 5.84 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
152
153
154
name: Package updates
on:
push:
branches:
- '**'
- '!master'
paths:
- 'packages/**'
- 'root-packages/**'
- 'x11-packages/**'
pull_request:
paths:
- 'packages/**'
- 'root-packages/**'
- 'x11-packages/**'
schedule:
- cron: "0 */6 * * *"
workflow_dispatch:
inputs:
packages:
description: "A space-seperated list of packages to update. Defaults to all packages"
default: "@all"
required: false
permissions: {} # none
jobs:
update-packages-dry-run:
permissions:
contents: read
if: github.event_name == 'pull_request' || github.event_name == 'push'
runs-on: ubuntu-slim
steps:
- name: Clone repository
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Gather build summary
run: |
BASE_REF="${{ github.event.pull_request.base.ref }}"
git fetch origin "${BASE_REF:-master}" 2>/dev/null
BASE_COMMIT="$(git merge-base "origin/${BASE_REF:-master}" "HEAD")"
# We are intentionally not using .commits[0].id and .commits[-1].id as github seems to
# only send 20 commits in the payload for github action runs instead of the 2048 documented
# limit. Perhaps 2048 is the limit just for webhooks, where they haven't documented
# properly that the limit for github actions is only 20:
#
# https://docs.github.com/en/webhooks/webhook-events-and-payloads#push
OLD_COMMIT="${{ github.event.before }}"
HEAD_COMMIT="${{ github.event.after }}"
if [ -z "${{ github.event.pull_request.base.sha }}" ]; then
if ! git log "$OLD_COMMIT" > /dev/null; then
if [ "$(git branch --show-current)" = "master" ]; then
echo "Force push detected on master branch. Unable to proceed."
exit 1
else
OLD_COMMIT=$(git fetch origin master >&2; git merge-base origin/master $HEAD_COMMIT)
fi
fi
echo "Processing commit range: ${OLD_COMMIT}..${HEAD_COMMIT}"
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r "${OLD_COMMIT}" "${HEAD_COMMIT}")
else
# Pull requests.
echo "Processing pull request #${{ github.event.pull_request.number }}: ${BASE_COMMIT}..HEAD"
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r "${BASE_COMMIT}" "HEAD")
fi
for repo_path in $(jq --raw-output 'del(.pkg_format) | keys | .[]' repo.json); do
repo=$(jq --raw-output '.["'${repo_path}'"].name' repo.json)
# Parse changed files and identify new packages and modified packages.
# Create lists of those packages that will be passed for
# further processing.
while read -r file; do
if [[ "$file" == ${repo_path}/* && "$file" =~ ^${repo_path}/([.a-z0-9+-]*)/.*$ ]] \
&& pkg=${BASH_REMATCH[1]} && [[ -d "${repo_path}/${pkg}" ]]; then
echo "$pkg"
fi
done <<< ${CHANGED_FILES}
# Fix so that lists do not contain duplicates and dump to file for processing in the next step
done | sort -u > ./built-packages.txt
- name: Process package updates
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_PACKAGES: "false"
CREATE_ISSUE: "false"
GIT_COMMIT_PACKAGES: "false"
GIT_PUSH_PACKAGES: "false"
run: |
readarray -t packages < ./built-packages.txt
if [ -n "${packages[*]}" ]; then
./scripts/bin/update-packages "${packages[@]}"
fi
update-packages:
permissions:
issues: write
contents: write
if: github.event_name != 'pull_request' && github.event_name != 'push' && github.repository == 'termux/termux-packages'
runs-on: ubuntu-24.04
steps:
- name: Clone repository
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.TERMUXBOT2_TOKEN }}
- name: Enable zram
uses: ./.github/actions/zram
with:
algorithm: zstd
size: 16G
priority: 100
device_name: /dev/zram0
- name: Load Docker image
run: |
./scripts/run-docker.sh true
- name: Free additional disk space
run: ./scripts/free-space.sh
- name: Install needed dependencies for package updates
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
curl \
python3 \
jq
- name: Process package updates
env:
GITHUB_TOKEN: ${{ secrets.TERMUXBOT2_TOKEN }}
BUILD_PACKAGES: "true"
CREATE_ISSUE: "true"
GIT_COMMIT_PACKAGES: "true"
GIT_PUSH_PACKAGES: "true"
MANUAL_INPUT_PACKAGES: ${{ github.event.inputs.packages }}
run: |
git config --global user.name "Termux Github Actions"
git config --global user.email "contact@termux.dev"
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
# Ensure MANUAL_INPUT_PACKAGES is newline free, and put it
# into an array
read -a PACKAGES <<< "${MANUAL_INPUT_PACKAGES//$'\n'/ }"
./scripts/bin/update-packages "${PACKAGES[@]}"
else
./scripts/bin/update-packages "@all"
fi
- name: Trigger repology metadata generation
if: always()
run: |
curl \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: Bearer ${{ secrets.TERMUXBOT2_TOKEN }}" \
-X POST \
--data '{"ref":"master"}' \
"https://api.github.com/repos/termux/repology-metadata/actions/workflows/repology_metadata.yml/dispatches"