-
Notifications
You must be signed in to change notification settings - Fork 3
141 lines (121 loc) · 4.65 KB
/
release.yml
File metadata and controls
141 lines (121 loc) · 4.65 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
name: Release
on:
push:
branches:
- main
- release/**
pull_request:
branches:
- main
- release/**
types: [opened, synchronize, reopened]
permissions:
contents: write
packages: write
jobs:
release-snapshot:
if: github.event_name == 'pull_request'
name: Release Snapshot
concurrency:
group: docker-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Get Project Name
id: project_name
run: echo "PROJECT_NAME=$(jq -r '.name' package.json)" >> $GITHUB_ENV
- name: Get Project Version
id: get_version
run: echo "VERSION=$(jq -r '.version' package.json)" >> $GITHUB_ENV
- name: Compute PR-based snapshot suffix
if: github.event_name == 'pull_request'
run: echo "SNAPSHOT_SUFFIX=-pr-${{ github.event.number }}" >> $GITHUB_ENV
- name: Check for existing release tag (only on PR)
if: github.event_name == 'pull_request'
env:
VERSION: ${{ env.VERSION }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG_EXISTS=$(curl -H "Authorization: token $GITHUB_TOKEN" -s https://api.github.com/repos/${{ github.repository }}/releases | jq -r ".[] | select(.tag_name == \"v$VERSION\") | .tag_name")
if [ "$TAG_EXISTS" == "v$VERSION" ]; then
echo "Release tag v$VERSION already exists. Rejecting PR."
exit 1
else
echo "No existing release with tag v$VERSION found. Proceeding with build."
fi
# Logins
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PAT }}
- name: Build and Push docker image (DockerHub)
env:
PROJECT_NAME: ${{ env.PROJECT_NAME }}
VERSION: ${{ env.VERSION }}
SNAPSHOT_SUFFIX: ${{ env.SNAPSHOT_SUFFIX }}
DOCKERHUB_ORG: ${{ secrets.DOCKERHUB_ORG }}
run: |
set -euo pipefail
TAG="v${VERSION}${SNAPSHOT_SUFFIX}"
DH_IMAGE="docker.io/${DOCKERHUB_ORG}/${PROJECT_NAME}:${TAG}"
docker build -f Dockerfile --build-arg SKIP_TESTS=true -t "${DH_IMAGE}" .
docker push "${DH_IMAGE}"
release:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Get Project Name
id: project_name
run: echo "PROJECT_NAME=$(jq -r '.name' package.json)" >> $GITHUB_ENV
- name: Get Project Version
id: get_version
run: echo "VERSION=$(jq -r '.version' package.json)" >> $GITHUB_ENV
- name: Check for existing release tag (only on PR)
if: github.event_name == 'pull_request'
env:
VERSION: ${{ env.VERSION }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG_EXISTS=$(curl -H "Authorization: token $GITHUB_TOKEN" -s https://api.github.com/repos/${{ github.repository }}/releases | jq -r ".[] | select(.tag_name == \"v$VERSION\") | .tag_name")
if [ "$TAG_EXISTS" == "v$VERSION" ]; then
echo "Release tag v$VERSION already exists. Rejecting PR."
exit 1
else
echo "No existing release with tag v$VERSION found. Proceeding with build."
fi
# Logins
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PAT }}
- name: Build and Push docker image (DockerHub)
env:
PROJECT_NAME: ${{ env.PROJECT_NAME }}
VERSION: ${{ env.VERSION }}
DOCKERHUB_ORG: ${{ secrets.DOCKERHUB_ORG }}
run: |
set -euo pipefail
TAG="v${VERSION}"
DH_IMAGE="docker.io/${DOCKERHUB_ORG}/${PROJECT_NAME}:${TAG}"
DH_LATEST="docker.io/${DOCKERHUB_ORG}/${PROJECT_NAME}:latest"
docker build -f Dockerfile --build-arg SKIP_TESTS=true -t "${DH_IMAGE}" .
docker tag "${DH_IMAGE}" "${DH_LATEST}"
docker push "${DH_IMAGE}"
docker push "${DH_LATEST}"
- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: "v${{ env.VERSION }}"
release_name: "v${{ env.VERSION }}"
body: "Release of version v${{ env.VERSION }}"
draft: false
prerelease: false