-
Notifications
You must be signed in to change notification settings - Fork 0
100 lines (83 loc) · 3.87 KB
/
Copy pathrelease-server.yml
File metadata and controls
100 lines (83 loc) · 3.87 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
name: Release Server
# main が更新されるたびにサーバー実行可能 jar(app.jar)と
# Raspberry Pi 用スクリプト一式をリリースとして公開する。
# Raspberry Pi の update-app.sh はこのリリースを参照して自身とサーバーを更新する。
on:
push:
branches: [ main ]
workflow_dispatch:
concurrency:
group: release-server
cancel-in-progress: true
jobs:
release-server:
name: Build and publish app.jar
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- name: Set up JDK 21
uses: actions/setup-java@cf277c60eb25467037889841efdb72551f06f6c3 # v4.9.1
with:
java-version: '21'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Determine release version
id: version
run: |
VERSION=$(./gradlew properties -q | grep "^version:" | awk '{print $2}')
RELEASE_VERSION="${VERSION}.${GITHUB_RUN_NUMBER}"
echo "RELEASE_VERSION=$RELEASE_VERSION" >> "$GITHUB_OUTPUT"
echo "Releasing server version: $RELEASE_VERSION"
- name: Build application jar
run: |
./gradlew bootJar -x test -x detekt
JAR_FILE=$(ls build/libs/server-*.jar | grep -v plain | head -1)
[ -n "$JAR_FILE" ] || { echo "bootJar の出力が見つかりません"; ls -la build/libs; exit 1; }
cp "$JAR_FILE" app.jar
- name: Archive Raspberry Pi scripts
run: |
tar -czf kidspos-scripts.tar.gz -C scripts raspberry-pi raspberry-pi-display
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_VERSION: ${{ steps.version.outputs.RELEASE_VERSION }}
run: |
BODY=$(cat <<EOF
## KidsPOS Server ${RELEASE_VERSION}
main の最新コードから自動ビルドされたサーバー実行可能 jar です。
- 生成元コミット: ${GITHUB_SHA}
- app.jar: java -jar app.jar で起動
- kidspos-scripts.tar.gz: Raspberry Pi 用スクリプト一式(update-app.sh が自動で取得して自身を更新します)
Raspberry Pi での更新:
sudo /opt/kidspos/update-app.sh
EOF
)
RELEASE_JSON=$(jq -n \
--arg tag "server-v${RELEASE_VERSION}" \
--arg name "Server ${RELEASE_VERSION}" \
--arg body "$BODY" \
--arg sha "$GITHUB_SHA" \
'{tag_name: $tag, target_commitish: $sha, name: $name, body: $body, draft: false, prerelease: false}')
RELEASE_ID=$(curl -sSf -X POST \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github+json" \
-d "$RELEASE_JSON" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" | jq -r '.id')
echo "Created release ID: $RELEASE_ID"
APP_JAR_ASSET_ID=$(curl -sSf -X POST \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "Content-Type: application/java-archive" \
--data-binary "@app.jar" \
"https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=app.jar" | jq -r '.id')
echo "Uploaded app.jar asset ID: $APP_JAR_ASSET_ID"
SCRIPTS_ASSET_ID=$(curl -sSf -X POST \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "Content-Type: application/gzip" \
--data-binary "@kidspos-scripts.tar.gz" \
"https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=kidspos-scripts.tar.gz" | jq -r '.id')
echo "Uploaded kidspos-scripts.tar.gz asset ID: $SCRIPTS_ASSET_ID"