@@ -11,16 +11,16 @@ jobs:
1111
1212 steps :
1313 - name : Checkout code
14- uses : actions/checkout@v4
14+ uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
1515
1616 - name : Set up JDK 21
17- uses : actions/setup-java@v4
17+ uses : actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
1818 with :
1919 java-version : ' 21'
2020 distribution : ' temurin'
2121
2222 - name : Cache Gradle packages
23- uses : actions/cache@v4
23+ uses : actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
2424 with :
2525 path : |
2626 ~/.gradle/caches
2929 restore-keys : |
3030 gradle-${{ runner.os }}-
3131
32+ - name : Cache OpenTelemetry Java Agent
33+ uses : actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
34+ with :
35+ path : ~/.cache/otel-java-agent
36+ key : otel-agent-${{ runner.os }}-${{ vars.OTEL_JAVA_AGENT_VERSION }}-${{ vars.OTEL_JAVA_AGENT_SHA256 }}
37+
38+ - name : Prepare OpenTelemetry Agent
39+ run : |
40+ mkdir -p ~/.cache/otel-java-agent
41+ if [ ! -f ~/.cache/otel-java-agent/opentelemetry-javaagent.jar ]; then
42+ wget -O ~/.cache/otel-java-agent/opentelemetry-javaagent.jar \
43+ "https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v${{ vars.OTEL_JAVA_AGENT_VERSION }}/opentelemetry-javaagent.jar"
44+ fi
45+ # Verify checksum
46+ echo "${{ vars.OTEL_JAVA_AGENT_SHA256 }} $HOME/.cache/otel-java-agent/opentelemetry-javaagent.jar" | sha256sum -c -
47+ cp ~/.cache/otel-java-agent/opentelemetry-javaagent.jar .
48+
3249 - name : Grant execute permission for gradlew
3350 run : chmod +x gradlew
3451
@@ -38,46 +55,49 @@ jobs:
3855 source .env.example
3956 set +a
4057 unset JAVA_TOOL_OPTIONS
41- ./gradlew clean build -x test -Dspring.profiles.active=prod
58+ ./gradlew bootJar -x test --build-cache -Dspring.profiles.active=prod
4259
4360 - name : Set up Docker Buildx
44- uses : docker/setup-buildx-action@v3
61+ uses : docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
4562
4663 - name : Login to Docker Hub
47- uses : docker/login-action@v3
64+ uses : docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
4865 with :
4966 username : ${{ secrets.DOCKERHUB_USERNAME }}
5067 password : ${{ secrets.DOCKERHUB_TOKEN }}
5168
5269 - name : Extract metadata for Docker
5370 id : meta
54- uses : docker/metadata-action@v5
71+ uses : docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5
5572 with :
5673 images : soundbar91/konect-prod
5774 tags : |
5875 type=raw,value=latest
5976 type=sha,prefix=sha-
6077
6178 - name : Build and push Docker image
62- uses : docker/build-push-action@v5
79+ uses : docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5
6380 with :
6481 context : .
65- platforms : linux/amd64,linux/ arm64
82+ platforms : linux/arm64
6683 push : true
6784 tags : ${{ steps.meta.outputs.tags }}
6885 labels : ${{ steps.meta.outputs.labels }}
6986 cache-from : type=gha
7087 cache-to : type=gha,mode=max
88+ build-args : |
89+ OTEL_JAVA_AGENT_VERSION=${{ vars.OTEL_JAVA_AGENT_VERSION }}
7190
7291 - name : Backup prod MySQL before deploy
73- uses : appleboy/ssh-action@v0.1.8
92+ uses : appleboy/ssh-action@v1.2.0
7493 with :
7594 host : ${{ secrets.PROD_SERVER_IP }}
7695 username : ${{ secrets.PROD_SERVER_USER }}
7796 key : ${{ secrets.PROD_SERVER_SSH_KEY }}
7897 port : ${{ secrets.PROD_SERVER_PORT }}
7998 script : |
8099 set -euo pipefail
100+ START_TIME=$(date +%s)
81101
82102 WORK_DIR="${{ secrets.PROD_WORK_DIR }}"
83103 MYSQL_CONTAINER="mysql-prod"
@@ -96,13 +116,22 @@ jobs:
96116
97117 find "$BACKUP_DIR" -type f -name '*.sql' -mtime +30 -delete
98118
119+ END_TIME=$(date +%s)
120+ echo "Prod MySQL backup completed in $((END_TIME - START_TIME))s"
121+
99122 - name : Deploy to prod server
100- uses : appleboy/ssh-action@v0.1.8
123+ uses : appleboy/ssh-action@v1.2.0
101124 with :
102125 host : ${{ secrets.PROD_SERVER_IP }}
103126 username : ${{ secrets.PROD_SERVER_USER }}
104127 key : ${{ secrets.PROD_SERVER_SSH_KEY }}
105128 port : ${{ secrets.PROD_SERVER_PORT }}
106129 script : |
130+ set -euo pipefail
131+ START_TIME=$(date +%s)
132+
107133 cd ${{ secrets.PROD_WORK_DIR }}
108134 ./deploy.sh
135+
136+ END_TIME=$(date +%s)
137+ echo "Prod deploy.sh completed in $((END_TIME - START_TIME))s"
0 commit comments