-
Notifications
You must be signed in to change notification settings - Fork 4
143 lines (121 loc) · 5.16 KB
/
frontend-release.yml
File metadata and controls
143 lines (121 loc) · 5.16 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
142
143
name: Frontend Release
on:
pull_request:
types: [closed]
branches: [main]
paths:
- 'services/frontend/**'
permissions:
contents: write
pull-requests: write
jobs:
release:
if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'frontend') && contains(github.event.pull_request.labels.*.name, 'release')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.APP_INSTALLATION_TOKEN }}
- name: git config
run: |
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
- name: Setup node
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Create Release
working-directory: services/frontend
env:
GITHUB_TOKEN: ${{ secrets.APP_INSTALLATION_TOKEN }}
run: |
# Let release-it handle the release process properly
npm run release -- --ci --verbose --no-git.requireCleanWorkingDir --no-increment
- name: Get version
id: package-version
uses: martinbeentjes/npm-get-version-action@main
with:
path: services/frontend
- name: Extract release notes
id: extract-release-notes
working-directory: services/frontend
run: |
VERSION=$(cat package.json | grep '"version"' | cut -d'"' -f4)
echo "Extracting release notes for version $VERSION"
# Find the latest frontend tag (excluding the current one)
LATEST_TAG=$(git tag --list "frontend-v*" --sort=-version:refname | grep -v "frontend-v${VERSION}" | head -1)
if [ -z "$LATEST_TAG" ]; then
echo "No previous frontend tag found, using all commits"
FRONTEND_COMMITS=$(git log --oneline --grep="(frontend)" --grep="(all)")
else
echo "Using commits since $LATEST_TAG"
# Get frontend and all scoped commits since last release
FRONTEND_COMMITS=$(git log ${LATEST_TAG}..HEAD --oneline --grep="(frontend)")
ALL_COMMITS=$(git log ${LATEST_TAG}..HEAD --oneline --grep="(all)")
# Combine and format the commits
COMBINED_COMMITS=$(echo -e "$FRONTEND_COMMITS\n$ALL_COMMITS" | sort -u | grep -v "^$" || true)
fi
# Format commits for release notes
if [ -n "$COMBINED_COMMITS" ]; then
RELEASE_NOTES=""
while IFS= read -r commit; do
if [ -n "$commit" ]; then
# Extract commit hash and message
HASH=$(echo "$commit" | cut -d' ' -f1)
MESSAGE=$(echo "$commit" | cut -d' ' -f2-)
RELEASE_NOTES="${RELEASE_NOTES}- ${MESSAGE} ([${HASH}](https://github.com/deploystackio/deploystack/commit/${HASH}))\n"
fi
done <<< "$COMBINED_COMMITS"
else
RELEASE_NOTES="No significant changes since last release."
fi
echo "release_notes<<EOF" >> $GITHUB_OUTPUT
echo -e "$RELEASE_NOTES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "Release notes extracted:"
echo -e "$RELEASE_NOTES"
- name: Update .env with version
working-directory: services/frontend
run: |
if [ ! -f .env ]; then
touch .env
fi
if grep -q "VITE_DEPLOYSTACK_APP_VERSION" .env; then
sed -i "s/VITE_DEPLOYSTACK_APP_VERSION=.*/VITE_DEPLOYSTACK_APP_VERSION=${{ steps.package-version.outputs.current-version }}/" .env
else
echo "VITE_DEPLOYSTACK_APP_VERSION=${{ steps.package-version.outputs.current-version }}" >> .env
fi
echo "Updated .env file:"
grep VITE_DEPLOYSTACK_APP_VERSION .env
- name: Build frontend
working-directory: services/frontend
env:
VITE_DEPLOYSTACK_APP_VERSION: ${{ steps.package-version.outputs.current-version }}
run: npm run build
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: ./services/frontend/Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
tags: |
deploystack/frontend:latest
deploystack/frontend:v${{ steps.package-version.outputs.current-version }}
build-args: |
DEPLOYSTACK_FRONTEND_VERSION=${{ steps.package-version.outputs.current-version }}
cache-from: type=gha
cache-to: type=gha,mode=max