Skip to content

Commit e487326

Browse files
committed
Add github package
1 parent 330ba56 commit e487326

File tree

6 files changed

+186
-94
lines changed

6 files changed

+186
-94
lines changed

.github/dependabot.yml

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
version: 2
22
updates:
3-
# Dependabot maven có thể chạy ở root của multi-module project
43
- package-ecosystem: "maven"
54
directory: "/"
65
schedule:
@@ -12,28 +11,18 @@ updates:
1211
labels: [ "dependencies", "maven", "backend" ]
1312
groups:
1413
spring-bom:
15-
patterns:
16-
- "org.springframework.boot:*"
17-
- "org.springframework.cloud:*"
14+
patterns: [ "org.springframework.boot:*","org.springframework.cloud:*" ]
1815
update-types: [ "minor", "patch" ]
1916
grpc-protobuf:
20-
patterns:
21-
- "io.grpc:*"
22-
- "com.google.protobuf:*"
17+
patterns: [ "io.grpc:*","com.google.protobuf:*" ]
2318
update-types: [ "minor", "patch" ]
2419
mapping-and-utils:
25-
patterns:
26-
- "org.projectlombok:*"
27-
- "org.mapstruct:*"
20+
patterns: [ "org.projectlombok:*","org.mapstruct:*" ]
2821
update-types: [ "minor", "patch" ]
2922
test-stack:
30-
patterns:
31-
- "org.jacoco:*"
32-
- "org.sonarsource.scanner.maven:sonar-maven-plugin"
33-
- "org.apache.maven.plugins:*"
23+
patterns: [ "org.jacoco:*","org.sonarsource.scanner.maven:sonar-maven-plugin","org.apache.maven.plugins:*" ]
3424
update-types: [ "minor", "patch" ]
3525

36-
# ========= FileService (.NET / NuGet) =========
3726
- package-ecosystem: "nuget"
3827
directory: "/FileService"
3928
schedule:
@@ -45,7 +34,6 @@ updates:
4534
labels: [ "dependencies", "nuget", "backend" ]
4635
open-pull-requests-limit: 10
4736

48-
# ========= Dockerfiles & Compose (thư mục /docker) =========
4937
- package-ecosystem: "docker"
5038
directory: "/docker"
5139
schedule:
@@ -56,23 +44,18 @@ updates:
5644
target-branch: "main"
5745
labels: [ "dependencies", "docker" ]
5846
open-pull-requests-limit: 10
47+
registries: [ dockerhub, ghcr ]
5948
groups:
6049
nginx-node-base:
61-
patterns:
62-
- "nginx"
63-
- "node"
50+
patterns: [ "nginx", "node" ]
6451
update-types: [ "minor", "patch" ]
6552
dotnet-base:
66-
patterns:
67-
- "mcr.microsoft.com/dotnet/*"
53+
patterns: [ "mcr.microsoft.com/dotnet/*" ]
6854
update-types: [ "minor", "patch" ]
6955
jre-maven:
70-
patterns:
71-
- "eclipse-temurin:*"
72-
- "maven:*"
56+
patterns: [ "eclipse-temurin:*", "maven:*" ]
7357
update-types: [ "minor", "patch" ]
7458

75-
# ========= Dockerfiles ở root =========
7659
- package-ecosystem: "docker"
7760
directory: "/"
7861
schedule:
@@ -83,8 +66,8 @@ updates:
8366
target-branch: "main"
8467
labels: [ "dependencies", "docker" ]
8568
open-pull-requests-limit: 10
69+
registries: [ dockerhub, ghcr ]
8670

87-
# ========= GitHub Actions =========
8871
- package-ecosystem: "github-actions"
8972
directory: "/"
9073
schedule:
@@ -95,3 +78,15 @@ updates:
9578
target-branch: "main"
9679
labels: [ "dependencies", "github-actions" ]
9780
open-pull-requests-limit: 10
81+
82+
registries:
83+
dockerhub:
84+
type: docker-registry
85+
url: https://index.docker.io/v1/
86+
username: ${{secrets.DOCKERHUB_USER}}
87+
password: ${{secrets.DOCKERHUB_TOKEN}}
88+
ghcr:
89+
type: docker-registry
90+
url: https://ghcr.io
91+
username: ${{secrets.GHCR_USERNAME}}
92+
password: ${{secrets.GHCR_TOKEN}}

.github/workflows/coding-service-publish.yml

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ name: Build & Push coding-service
22

33
on:
44
push:
5-
branches:
6-
- main
7-
tags:
8-
- 'v*.*.*'
5+
branches: [ main ]
6+
tags: [ 'v*.*.*' ]
97
paths:
108
- 'coding-service/**'
119
- 'docker/java-service-coding.Dockerfile'
@@ -25,35 +23,52 @@ jobs:
2523
runs-on: ubuntu-latest
2624

2725
steps:
28-
- name: Checkout
29-
uses: actions/checkout@v4
26+
- uses: actions/checkout@v4
27+
- uses: docker/setup-qemu-action@v3
28+
- uses: docker/setup-buildx-action@v3
3029

31-
- name: Set up QEMU (multi-arch)
32-
uses: docker/setup-qemu-action@v3
33-
34-
- name: Set up Docker Buildx
35-
uses: docker/setup-buildx-action@v3
36-
37-
- name: Derive IMAGE_TAG
30+
- name: Derive tags (Docker Hub + GHCR)
31+
id: meta
3832
run: |
33+
OWNER_LC="${GITHUB_REPOSITORY_OWNER,,}"
34+
echo "OWNER_LC=$OWNER_LC" >> $GITHUB_ENV
3935
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
40-
echo "IMAGE_TAG=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
36+
TAG="${GITHUB_REF_NAME#v}"
4137
else
42-
echo "IMAGE_TAG=${GITHUB_SHA::12}" >> $GITHUB_ENV
38+
TAG="${GITHUB_SHA::12}"
4339
fi
40+
echo "IMAGE_TAG=${TAG}" >> $GITHUB_ENV
41+
42+
HUB="${{ secrets.DOCKERHUB_USER }}/codecampus-coding-service:${TAG}"
43+
GHCR="ghcr.io/${OWNER_LC}/codecampus-coding-service:${TAG}"
44+
if [ "${GITHUB_REF_TYPE}" = "tag" ] || [ "${GITHUB_REF_NAME}" = "main" ]; then
45+
HUB="${HUB}"$'\n'"${{ secrets.DOCKERHUB_USER }}/codecampus-coding-service:latest"
46+
GHCR="${GHCR}"$'\n'"ghcr.io/${OWNER_LC}/codecampus-coding-service:latest"
47+
fi
48+
echo "tags=${HUB}"$'\n'"${GHCR}" >> $GITHUB_OUTPUT
4449
4550
- name: Login to Docker Hub
4651
uses: docker/login-action@v3
4752
with:
4853
username: ${{ secrets.DOCKERHUB_USER }}
4954
password: ${{ secrets.DOCKERHUB_TOKEN }}
5055

56+
- name: Login to GHCR
57+
uses: docker/login-action@v3
58+
with:
59+
registry: ghcr.io
60+
username: ${{ github.actor }}
61+
password: ${{ secrets.GITHUB_TOKEN }}
62+
5163
- name: Build & Push coding-service
52-
env:
53-
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
54-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
55-
IMAGE_TAG: ${{ env.IMAGE_TAG }}
56-
DOCKER_PLATFORMS: linux/amd64
57-
run: |
58-
chmod +x ./build-image-coding-github.sh
59-
./build-image-coding-github.sh coding-service
64+
uses: docker/build-push-action@v6
65+
with:
66+
context: .
67+
file: docker/java-service-coding.Dockerfile
68+
build-args: |
69+
MODULE=coding-service
70+
platforms: linux/amd64
71+
push: true
72+
tags: ${{ steps.meta.outputs.tags }}
73+
cache-from: type=gha
74+
cache-to: type=gha,mode=max
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: Dependabot Auto-merge
2+
3+
on:
4+
pull_request_target:
5+
types: [ opened, synchronize, reopened, ready_for_review ]
6+
7+
permissions:
8+
contents: write
9+
pull-requests: write
10+
11+
jobs:
12+
automerge:
13+
if: github.actor == 'dependabot[bot]'
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Fetch Dependabot metadata
18+
id: meta
19+
uses: dependabot/fetch-metadata@v2
20+
with:
21+
github-token: ${{ secrets.GITHUB_TOKEN }}
22+
23+
- name: Auto-approve patch/minor
24+
if: |
25+
steps.meta.outputs.update-type == 'version-update:semver-patch' ||
26+
steps.meta.outputs.update-type == 'version-update:semver-minor'
27+
uses: hmarr/auto-approve-action@v4
28+
with:
29+
github-token: ${{ secrets.GITHUB_TOKEN }}
30+
31+
- name: Enable PR auto-merge (squash) for patch/minor
32+
if: |
33+
steps.meta.outputs.update-type == 'version-update:semver-patch' ||
34+
steps.meta.outputs.update-type == 'version-update:semver-minor'
35+
uses: peter-evans/enable-pull-request-automerge@v3
36+
with:
37+
token: ${{ secrets.GITHUB_TOKEN }}
38+
pull-request-number: ${{ github.event.pull_request.number }}
39+
merge-method: squash

.github/workflows/deploy.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,21 @@ jobs:
130130
docker-compose "$@"
131131
fi
132132
}
133-
134-
# docker login (nếu có)
133+
134+
# docker login Docker Hub (nếu có)
135135
if [ -n "${DOCKERHUB_USER:-}" ] && [ -n "${DOCKERHUB_TOKEN:-}" ]; then
136136
echo "docker login Docker Hub..."
137137
echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USER" --password-stdin
138138
else
139139
echo "Thiếu DOCKERHUB_USER/DOCKERHUB_TOKEN trong .env (image public thì vẫn OK)."
140140
fi
141-
141+
142+
# docker login GHCR (nếu có)
143+
if [ -n "${GHCR_USERNAME:-}" ] && [ -n "${GHCR_TOKEN:-}" ]; then
144+
echo "docker login GHCR..."
145+
echo "$GHCR_TOKEN" | docker login ghcr.io -u "$GHCR_USERNAME" --password-stdin
146+
fi
147+
142148
echo "Hạ tầng (idempotent)..."
143149
compose -f docker-compose.prod-infra.yml --env-file .env up -d
144150

.github/workflows/docker-publish.yml

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,53 @@ jobs:
3535
- org-service
3636

3737
steps:
38-
- name: Checkout
39-
uses: actions/checkout@v4
38+
- uses: actions/checkout@v4
39+
- uses: docker/setup-qemu-action@v3
40+
- uses: docker/setup-buildx-action@v3
4041

41-
- name: Set up QEMU (multi-arch)
42-
uses: docker/setup-qemu-action@v3
43-
44-
- name: Set up Docker Buildx
45-
uses: docker/setup-buildx-action@v3
46-
47-
- name: Derive IMAGE_TAG
42+
- name: Derive tags (Docker Hub + GHCR)
43+
id: meta
4844
run: |
45+
OWNER_LC="${GITHUB_REPOSITORY_OWNER,,}"
46+
echo "OWNER_LC=$OWNER_LC" >> $GITHUB_ENV
47+
MOD="${{ matrix.module }}"
4948
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
50-
echo "IMAGE_TAG=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
49+
TAG="${GITHUB_REF_NAME#v}"
5150
else
52-
echo "IMAGE_TAG=${GITHUB_SHA::12}" >> $GITHUB_ENV
51+
TAG="${GITHUB_SHA::12}"
52+
fi
53+
echo "IMAGE_TAG=${TAG}" >> $GITHUB_ENV
54+
55+
HUB="${{ secrets.DOCKERHUB_USER }}/codecampus-${MOD}:${TAG}"
56+
GHCR="ghcr.io/${OWNER_LC}/codecampus-${MOD}:${TAG}"
57+
if [ "${GITHUB_REF_TYPE}" = "tag" ] || [ "${GITHUB_REF_NAME}" = "main" ]; then
58+
HUB="${HUB}"$'\n'"${{ secrets.DOCKERHUB_USER }}/codecampus-${MOD}:latest"
59+
GHCR="${GHCR}"$'\n'"ghcr.io/${OWNER_LC}/codecampus-${MOD}:latest"
5360
fi
61+
echo "tags=${HUB}"$'\n'"${GHCR}" >> $GITHUB_OUTPUT
62+
63+
- name: Login to Docker Hub
64+
uses: docker/login-action@v3
65+
with:
66+
username: ${{ secrets.DOCKERHUB_USER }}
67+
password: ${{ secrets.DOCKERHUB_TOKEN }}
68+
69+
- name: Login to GHCR
70+
uses: docker/login-action@v3
71+
with:
72+
registry: ghcr.io
73+
username: ${{ github.actor }}
74+
password: ${{ secrets.GITHUB_TOKEN }}
5475

5576
- name: Build & Push ${{ matrix.module }}
56-
env:
57-
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
58-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
59-
IMAGE_TAG: ${{ env.IMAGE_TAG }}
60-
DOCKER_PLATFORMS: linux/amd64
61-
run: |
62-
chmod +x ./build-image-github.sh
63-
./build-image-github.sh ${{ matrix.module }}
77+
uses: docker/build-push-action@v6
78+
with:
79+
context: .
80+
file: docker/java-service.Dockerfile
81+
build-args: |
82+
MODULE=${{ matrix.module }}
83+
platforms: linux/amd64
84+
push: true
85+
tags: ${{ steps.meta.outputs.tags }}
86+
cache-from: type=gha
87+
cache-to: type=gha,mode=max

0 commit comments

Comments
 (0)