-
Notifications
You must be signed in to change notification settings - Fork 1.4k
176 lines (174 loc) · 9.36 KB
/
test.yml
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
name: Test
on:
schedule:
- cron: 15,45 0-18,22-23 * * *
workflow_dispatch:
inputs:
rebuild:
description: '忽略构建记录以重新构建'
required: false
type: boolean
donotpublish:
description: '构建后不提交发布新版'
required: false
type: boolean
testOption:
description: 'arm64支持,不支持ijk解码'
required: false
type: boolean
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- userName: q215613905
repoName: TVBoxOS
branchName: main
- userName: takagen99
repoName: Box
branchName: main
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Check New Commit
run: |
upStream=https://github.com/${{ matrix.userName }}/${{ matrix.repoName }}
echo "upStream=$upStream" >> $GITHUB_ENV
commit=$(curl -sL $upStream/commits/${{ matrix.branchName }} |grep -o "/${{ matrix.userName }}/${{ matrix.repoName }}/commit/[a-z0-9]\+" |head -1 | cut -d\/ -f5)
if ! grep -q "$commit" README.md || [ "${{ inputs.rebuild }}" == "true" ]; then
echo "commit=$commit" >> $GITHUB_ENV
echo "commitS=${commit:0:7}" >> $GITHUB_ENV
fi
- name: Checkout Source Code and Zip
if: ${{ env.commit }}
run: |
git clone ${{ env.upStream }} TVBoxOSC
cd TVBoxOSC
git checkout ${{ env.commit }}
echo "tag=$(git log --date=format:'%Y%m%d-%H%M' --pretty=format:%cd ${{ env.commitS }} -1)" >> $GITHUB_ENV
zip -q -x ".git/*" -r ${{ env.commitS }}-source.zip .
- uses: actions/cache@v3
if: ${{ env.commit }}
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-${{ matrix.userName }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-${{ matrix.userName }}-
- name: Add Build Repo
if: ${{ env.commit }}
working-directory: TVBoxOSC
run: |
if grep -q 'crosswalk' build.gradle; then
sed -i "/crosswalk/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle
else
sed -i "/jitpack.io/a\ maven { url 'https://o0halflife0o.github.io/crosswalk/releases/crosswalk/android/maven2' }" build.gradle
fi
- name: Extra Option For Test
if: ${{ inputs.testOption }}
working-directory: TVBoxOSC
run: |
#添加arm64支持,不支持ijk解码
sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" app/build.gradle
sed -i "/armeabi-v7a[\'\"]$/s#\$#, 'arm64-v8a'#" player/build.gradle
- name: Release Apk Sign
if: ${{ env.commit }}
working-directory: TVBoxOSC
run: |
signingConfigs='ICAgIHNpZ25pbmdDb25maWdzIHtcCiAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICBteUNvbmZpZyB7XAogICAgICAgICAgICAgICAgc3RvcmVGaWxlIGZpbGUoUkVMRUFTRV9TVE9SRV9GSUxFKVwKICAgICAgICAgICAgICAgIHN0b3JlUGFzc3dvcmQgUkVMRUFTRV9TVE9SRV9QQVNTV09SRFwKICAgICAgICAgICAgICAgIGtleUFsaWFzIFJFTEVBU0VfS0VZX0FMSUFTXAogICAgICAgICAgICAgICAga2V5UGFzc3dvcmQgUkVMRUFTRV9LRVlfUEFTU1dPUkRcCiAgICAgICAgICAgICAgICB2MVNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICB2MlNpZ25pbmdFbmFibGVkIHRydWVcCiAgICAgICAgICAgICAgICBlbmFibGVWM1NpZ25pbmcgPSB0cnVlXAogICAgICAgICAgICAgICAgZW5hYmxlVjRTaWduaW5nID0gdHJ1ZVwKICAgICAgICAgICAgfVwKICAgICAgICB9XAogICAgfVwKXA=='
signingConfig='ICAgICAgICAgICAgaWYgKHByb2plY3QuaGFzUHJvcGVydHkoIlJFTEVBU0VfU1RPUkVfRklMRSIpKSB7XAogICAgICAgICAgICAgICAgc2lnbmluZ0NvbmZpZyBzaWduaW5nQ29uZmlncy5teUNvbmZpZ1wKICAgICAgICAgICAgfVwK'
signingConfigs="$(echo "$signingConfigs" |base64 -d )"
signingConfig="$(echo "$signingConfig" |base64 -d )"
sed -i -e "/defaultConfig {/i\\$signingConfigs " -e "/debug {/a\\$signingConfig " -e "/release {/a\\$signingConfig " app/build.gradle
cp -f ${{ github.workspace }}/.github/workflows/TVBoxOSC.jks app/TVBoxOSC.jks
sed -i '$a\RELEASE_STORE_FILE=./TVBoxOSC.jks' ./gradle.properties
sed -i '$a\RELEASE_KEY_ALIAS=TVBoxOSC' ./gradle.properties
sed -i '$a\RELEASE_STORE_PASSWORD=TVBoxOSC' ./gradle.properties
sed -i '$a\RELEASE_KEY_PASSWORD=TVBoxOSC' ./gradle.properties
- name: Build With Gradle
if: ${{ env.commit }}
working-directory: TVBoxOSC
run: |
chmod +x gradlew
./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all
- name: Prepare App
if: ${{ env.commit }}
working-directory: TVBoxOSC
run: |
rm -rf apk/
mkdir -p apk/
for file in `find ~ -name "*release*.apk" -print`; do
mv "$file" apk/TVBox_${{ matrix.userName }}_${{ env.tag }}.apk
done
- name: Upload App To Artifact
uses: actions/upload-artifact@v3
if: ${{ env.commit }}
with:
name: ${{ matrix.userName }}-${{ matrix.repoName }}
path: TVBoxOSC/apk/*
- name: Whether Or Not to Publish
if: ${{ inputs.donotpublish && env.commit }}
run: |
echo "commit=" >> $GITHUB_ENV
- name: Release and Upload Assets
uses: softprops/action-gh-release@v1
if: ${{ env.commit }}
with:
name: ${{ env.tag }}
tag_name: ${{ env.tag }}
body: "Credit: ${{ matrix.userName }}/${{ matrix.repoName }}\n
Commit: ${{ env.commit }}"
files: |
TVBoxOSC/apk/*
TVBoxOSC/${{ env.commitS }}-source.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Post To Telegram
if: ${{ env.commit }}
run: |
if [ -n "${{ secrets.CHANNEL_ID }}" ] && [ -n "${{ secrets.BOT_TOKEN }}" ]; then
OUTPUT="${{ github.workspace }}/TVBoxOSC/apk/"
export appRelease=$(find $OUTPUT -name "*${{ matrix.userName }}*.apk")
export sourceCode="${{ github.workspace }}/TVBoxOSC/${{ env.commitS }}-source.zip"
lastCommit=$(grep "${{ matrix.userName }}\/${{ matrix.repoName }}" README.md |grep -o '[a-z0-9]\{40\}')
cd TVBoxOSC
export LESSCHARSET=utf-8
if [ "${{ env.commit }}" == "${lastCommit}" ]; then
COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }} -1 |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")"
else
COMMIT_MESSAGE="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "`git log --pretty=format:%B ${{ env.commitS }}...${lastCommit:0:7} |sed -e 's# \{2,\}#\n#g' -e '/^Merge pull/d' -e 's#"#\\"#g' -e '/^$/d' |cat -n |sort -k2,2 -k1,1n |uniq -f1 |sort -k1,1n |cut -f2- `")"
fi
if [ ${#COMMIT_MESSAGE} -gt 0 ] && [ ${#COMMIT_MESSAGE} -le 1024 ]; then
ESCAPED="$(echo $COMMIT_MESSAGE |sed 's#%[eE]2[0-9a-zA-Z%]\{6\}##g')"
else
COMMIT_URL=${{ env.upStream }}/commits/${{ matrix.branchName }}
ESCAPED="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$COMMIT_URL")"
fi
#检查源码尺寸,太大则不上传
file_size=$(du -s ${sourceCode} | awk '{print $1}')
#文件最大值,1024代表1M
file_limit_size=20480
if [[ ${file_size} -lt ${file_limit_size} ]];then
curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FsourceCode%22%2C%20%22caption%22%3A%22Credit%3A%20%23${{ matrix.userName }}%20%0ACommit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease" -F sourceCode="@$sourceCode"
else
curl -v "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMediaGroup?chat_id=${{ secrets.CHANNEL_ID }}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FappRelease%22%2C%20%22caption%22%3A%22Credit%3A%20%23${{ matrix.userName }}%20%0ACommit%3A%20${{ env.commit }}%0AChangelog%3A%0A${ESCAPED}%22%7D%5D" -F appRelease="@$appRelease"
fi
fi
- name: Push to master
if: ${{ env.commit }}
run: |
rm -rf TVBoxOSC
sed -i '/url =/d' ./.git/config
git config --local user.name "github-actions[bot]"
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git remote set-url --add origin "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}"
git pull --rebase
sed -i "/${{ matrix.userName }}\/${{ matrix.repoName }}/s#Updated: [a-zA-Z0-9]*#Updated: ${{ env.commit }}#" README.md
git add --all
git commit -m "${{ env.commit }}"
git push -u -f origin master