project-auto-wizard 0.14.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +3 -1
- package/README.ko.md +3 -1
- package/README.md +4 -2
- package/README.zh-CN.md +3 -1
- package/package.json +1 -1
- package/payload/config/breaking-changes.json +31 -5
- package/payload/config/wizard-prompts.yml +0 -4
- package/payload/scripts/changelog_manager.py +8 -8
- package/payload/scripts/messages.py +460 -24
- package/payload/scripts/version_manager.py +102 -73
- package/payload/version.yml.template +2 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +9 -4
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +62 -30
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +96 -44
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +79 -35
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +71 -35
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +24 -8
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +29 -10
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +57 -23
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +155 -72
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +49 -20
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +162 -62
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +184 -87
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +38 -15
- package/payload/workflows/go/PROJECT-GO-CI.yaml +14 -5
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +375 -120
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +9 -4
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +12 -4
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +375 -120
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +9 -4
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +38 -9
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +19 -5
- package/payload/workflows/spring/PROJECT-SPRING-CI.yml +71 -35
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +9 -6
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +7 -4
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +425 -144
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +7 -4
- package/src/cli/args.js +17 -7
- package/src/commands/doctor.js +16 -0
- package/src/commands/dry-run.js +10 -1
- package/src/commands/full.js +5 -2
- package/src/commands/interactive.js +4 -1
- package/src/commands/status.js +14 -1
- package/src/core/copy/readme.js +58 -2
- package/src/core/copy/simple.js +31 -0
- package/src/core/copy/workflows.js +2 -2
- package/src/core/deploy-style.js +1 -1
- package/src/core/detect.js +3 -2
- package/src/core/types.js +15 -8
- package/src/core/version-yml.js +52 -6
- package/src/i18n/catalog/en/cli.js +1 -0
- package/src/i18n/catalog/en/commands.js +9 -0
- package/src/i18n/catalog/en/copy.js +1 -0
- package/src/i18n/catalog/en/core2.js +3 -0
- package/src/i18n/catalog/ko/cli.js +1 -0
- package/src/i18n/catalog/ko/commands.js +9 -0
- package/src/i18n/catalog/ko/copy.js +1 -0
- package/src/i18n/catalog/ko/core2.js +3 -0
- package/src/index.js +8 -4
- package/src/ui/env-plan.js +1 -1
- package/src/ui/prompts.js +7 -3
- package/src/ui/summary.js +1 -1
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +0 -241
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +0 -330
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
# project-auto-wizard:managed-workflow
|
|
2
|
-
# Next.js CI/CD deployment
|
|
3
|
-
# Builds a Docker image and deploys it when the {{MAIN_BRANCH}} branch is pushed. Deployed as a Node.js runtime container to support SSR.
|
|
4
|
-
#
|
|
5
|
-
# GitHub Secrets
|
|
6
|
-
# ENV_FILE: contents of the .env file
|
|
7
|
-
# DOCKERHUB_USERNAME: DockerHub username
|
|
8
|
-
# DOCKERHUB_TOKEN: DockerHub access token
|
|
9
|
-
# SERVER_HOST: deploy server address
|
|
10
|
-
# SERVER_USER: SSH username
|
|
11
|
-
# SERVER_PASSWORD: SSH password (when SSH_AUTH_METHOD=password)
|
|
12
|
-
# SSH_KEY: contents of the SSH private key .pem (when SSH_AUTH_METHOD=key, e.g. AWS EC2)
|
|
13
|
-
# PROJECT_DEPLOY_PORT (optional): deploy port (default: 3000)
|
|
14
|
-
#
|
|
15
|
-
# Environment variables (set in the env section)
|
|
16
|
-
# SSH_AUTH_METHOD: SSH auth method password | key (default: password)
|
|
17
|
-
# SSH_PORT (default: 2022), SSH_COMMAND_TIMEOUT (default: 600s), SSH_CONNECTION_TIMEOUT (default: 60s)
|
|
18
|
-
|
|
19
|
-
name: PROJECT-NEXT-CICD
|
|
20
|
-
|
|
21
|
-
on:
|
|
22
|
-
push:
|
|
23
|
-
branches:
|
|
24
|
-
- "{{MAIN_BRANCH}}"
|
|
25
|
-
# @wizard paths-anchor (for a monorepo the integrator injects the paths filter here)
|
|
26
|
-
workflow_dispatch:
|
|
27
|
-
|
|
28
|
-
env:
|
|
29
|
-
PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
|
|
30
|
-
# Subdirectory of this project in a monorepo (--paths). Base for the build and Docker context ('.' means the repo root)
|
|
31
|
-
PROJECT_PATH: "." # @wizard auto:project-path
|
|
32
|
-
DOCKER_IMAGE_PREFIX: "nextjs-container"
|
|
33
|
-
NODE_VERSION: "20.15.0"
|
|
34
|
-
ENV_FILE_NAME: ".env"
|
|
35
|
-
|
|
36
|
-
# SSH auth method: "password" (Synology, generic servers) | "key" (AWS EC2, .pem)
|
|
37
|
-
# password -> uses the SERVER_PASSWORD secret
|
|
38
|
-
# key -> uses the SSH_KEY secret (the whole .pem file content as the secret value)
|
|
39
|
-
SSH_AUTH_METHOD: "password" # @wizard ask:password
|
|
40
|
-
|
|
41
|
-
SSH_PORT: "__SSH_PORT__" # @wizard ask:2022
|
|
42
|
-
SSH_COMMAND_TIMEOUT: "600s" # SSH command execution timeout
|
|
43
|
-
SSH_CONNECTION_TIMEOUT: "60s" # SSH connection timeout
|
|
44
|
-
|
|
45
|
-
jobs:
|
|
46
|
-
build:
|
|
47
|
-
name: Build Next.js application
|
|
48
|
-
runs-on: ubuntu-latest
|
|
49
|
-
# In a monorepo (--paths), build inside that subfolder
|
|
50
|
-
defaults:
|
|
51
|
-
run:
|
|
52
|
-
working-directory: ${{ env.PROJECT_PATH }}
|
|
53
|
-
|
|
54
|
-
steps:
|
|
55
|
-
- name: Checkout repository
|
|
56
|
-
uses: actions/checkout@v7
|
|
57
|
-
|
|
58
|
-
# If a required Secret or the Dockerfile is missing, report the missing item and stop
|
|
59
|
-
# instead of failing later with a third-party error such as docker login
|
|
60
|
-
- name: Deploy pre-check (Secrets and Dockerfile)
|
|
61
|
-
working-directory: ${{ env.PROJECT_PATH }}
|
|
62
|
-
env:
|
|
63
|
-
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
64
|
-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
65
|
-
SERVER_HOST: ${{ secrets.SERVER_HOST }}
|
|
66
|
-
SERVER_USER: ${{ secrets.SERVER_USER }}
|
|
67
|
-
SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }}
|
|
68
|
-
SSH_KEY: ${{ secrets.SSH_KEY }}
|
|
69
|
-
DOCKERFILE: Dockerfile
|
|
70
|
-
run: |
|
|
71
|
-
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
72
|
-
MISSING=""
|
|
73
|
-
for NAME in DOCKERHUB_USERNAME DOCKERHUB_TOKEN SERVER_HOST SERVER_USER; do
|
|
74
|
-
[ -n "${!NAME}" ] || MISSING="$MISSING $NAME"
|
|
75
|
-
done
|
|
76
|
-
# SSH_AUTH_METHOD=key needs SSH_KEY, otherwise SERVER_PASSWORD is required
|
|
77
|
-
if [ "${SSH_AUTH_METHOD:-password}" = "key" ]; then
|
|
78
|
-
[ -n "$SSH_KEY" ] || MISSING="$MISSING SSH_KEY"
|
|
79
|
-
else
|
|
80
|
-
[ -n "$SERVER_PASSWORD" ] || MISSING="$MISSING SERVER_PASSWORD"
|
|
81
|
-
fi
|
|
82
|
-
FAILED=false
|
|
83
|
-
if [ -n "$MISSING" ]; then
|
|
84
|
-
echo "::error title=$(m cicd.precheck_secret_title)::$(m cicd.precheck_secret_body missing="$MISSING")"
|
|
85
|
-
FAILED=true
|
|
86
|
-
fi
|
|
87
|
-
if [ ! -f "$DOCKERFILE" ]; then
|
|
88
|
-
echo "::error title=$(m cicd.precheck_dockerfile_title)::$(m cicd.precheck_dockerfile_body path="${PROJECT_PATH}/${DOCKERFILE#./}")"
|
|
89
|
-
FAILED=true
|
|
90
|
-
fi
|
|
91
|
-
if [ "$FAILED" = "true" ]; then
|
|
92
|
-
exit 1
|
|
93
|
-
fi
|
|
94
|
-
m cicd.precheck_ok
|
|
95
|
-
|
|
96
|
-
- name: Set up Node.js
|
|
97
|
-
uses: actions/setup-node@v7
|
|
98
|
-
with:
|
|
99
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
100
|
-
cache: 'npm'
|
|
101
|
-
cache-dependency-path: ${{ env.PROJECT_PATH }}/package-lock.json
|
|
102
|
-
|
|
103
|
-
- name: Create environment file (${{ env.ENV_FILE_NAME }})
|
|
104
|
-
run: |
|
|
105
|
-
m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
|
|
106
|
-
cat << 'EOF' > ./${{ env.ENV_FILE_NAME }}
|
|
107
|
-
${{ secrets.ENV_FILE || secrets.ENV }}
|
|
108
|
-
EOF
|
|
109
|
-
m cicd.env_file_created file="${{ env.ENV_FILE_NAME }}"
|
|
110
|
-
|
|
111
|
-
- name: Cache npm dependencies
|
|
112
|
-
uses: actions/cache@v6
|
|
113
|
-
with:
|
|
114
|
-
path: ~/.npm
|
|
115
|
-
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
|
|
116
|
-
restore-keys: |
|
|
117
|
-
${{ runner.os }}-npm-
|
|
118
|
-
|
|
119
|
-
- name: Cache node_modules
|
|
120
|
-
id: node-modules-cache
|
|
121
|
-
uses: actions/cache@v6
|
|
122
|
-
with:
|
|
123
|
-
path: "**/node_modules"
|
|
124
|
-
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }}
|
|
125
|
-
restore-keys: |
|
|
126
|
-
${{ runner.os }}-node-modules-
|
|
127
|
-
|
|
128
|
-
- name: Install dependencies
|
|
129
|
-
if: steps.node-modules-cache.outputs.cache-hit != 'true'
|
|
130
|
-
run: npm ci
|
|
131
|
-
|
|
132
|
-
- name: Cache Next.js build
|
|
133
|
-
uses: actions/cache@v6
|
|
134
|
-
with:
|
|
135
|
-
path: ${{ env.PROJECT_PATH }}/.next/cache
|
|
136
|
-
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
|
|
137
|
-
restore-keys: |
|
|
138
|
-
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
|
|
139
|
-
${{ runner.os }}-nextjs-
|
|
140
|
-
|
|
141
|
-
- name: Build with npm
|
|
142
|
-
run: npm run build
|
|
143
|
-
|
|
144
|
-
- name: Set up Docker Buildx
|
|
145
|
-
uses: docker/setup-buildx-action@v3
|
|
146
|
-
|
|
147
|
-
- name: Log in to DockerHub
|
|
148
|
-
uses: docker/login-action@v3
|
|
149
|
-
with:
|
|
150
|
-
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
151
|
-
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
152
|
-
|
|
153
|
-
- name: Cache Docker layers
|
|
154
|
-
uses: actions/cache@v6
|
|
155
|
-
with:
|
|
156
|
-
path: /tmp/.buildx-cache
|
|
157
|
-
key: ${{ runner.os }}-buildx-${{ hashFiles('Dockerfile') }}-${{ hashFiles('package-lock.json') }}
|
|
158
|
-
restore-keys: |
|
|
159
|
-
${{ runner.os }}-buildx-
|
|
160
|
-
|
|
161
|
-
- name: Build and push Docker image
|
|
162
|
-
uses: docker/build-push-action@v5
|
|
163
|
-
with:
|
|
164
|
-
context: ${{ env.PROJECT_PATH }}
|
|
165
|
-
file: ${{ env.PROJECT_PATH }}/Dockerfile
|
|
166
|
-
push: true
|
|
167
|
-
tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.PROJECT_NAME }}-${{ env.DOCKER_IMAGE_PREFIX }}:${{ github.ref_name }}
|
|
168
|
-
cache-from: type=local,src=/tmp/.buildx-cache
|
|
169
|
-
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
|
170
|
-
|
|
171
|
-
- name: Move Docker cache
|
|
172
|
-
run: |
|
|
173
|
-
rm -rf /tmp/.buildx-cache
|
|
174
|
-
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
|
175
|
-
|
|
176
|
-
deploy:
|
|
177
|
-
name: Deploy to remote server
|
|
178
|
-
needs: build
|
|
179
|
-
runs-on: ubuntu-latest
|
|
180
|
-
|
|
181
|
-
steps:
|
|
182
|
-
# The deploy script runs on the remote server, so the messages are resolved here
|
|
183
|
-
# and handed to it through env vars (PAW_M_*)
|
|
184
|
-
- name: Checkout message catalog
|
|
185
|
-
uses: actions/checkout@v7
|
|
186
|
-
with:
|
|
187
|
-
sparse-checkout: |
|
|
188
|
-
.github/scripts/messages.py
|
|
189
|
-
version.yml
|
|
190
|
-
sparse-checkout-cone-mode: false
|
|
191
|
-
|
|
192
|
-
- name: Load messages
|
|
193
|
-
run: |
|
|
194
|
-
python3 .github/scripts/messages.py dump cicd. | PYTHONIOENCODING=utf-8 python3 -c 'import json,sys; [print("PAW_M_" + k.replace(".", "_") + "=" + v) for k, v in json.load(sys.stdin).items()]' >> "$GITHUB_ENV"
|
|
195
|
-
|
|
196
|
-
- name: Deploy
|
|
197
|
-
uses: appleboy/ssh-action@v1.0.3
|
|
198
|
-
env:
|
|
199
|
-
SSH_AUTH_METHOD: ${{ env.SSH_AUTH_METHOD }}
|
|
200
|
-
with:
|
|
201
|
-
host: ${{ secrets.SERVER_HOST }}
|
|
202
|
-
username: ${{ secrets.SERVER_USER }}
|
|
203
|
-
password: ${{ secrets.SERVER_PASSWORD }}
|
|
204
|
-
key: ${{ secrets.SSH_KEY }}
|
|
205
|
-
port: ${{ env.SSH_PORT }}
|
|
206
|
-
command_timeout: ${{ env.SSH_COMMAND_TIMEOUT }}
|
|
207
|
-
timeout: ${{ env.SSH_CONNECTION_TIMEOUT }}
|
|
208
|
-
envs: SSH_AUTH_METHOD
|
|
209
|
-
script: |
|
|
210
|
-
set -e
|
|
211
|
-
|
|
212
|
-
# Fill the {name} placeholders of a message template (usage: m "template" name=value ...)
|
|
213
|
-
m() { local s="$1" kv; shift; for kv in "$@"; do s="${s//\{${kv%%=*}\}/${kv#*=}}"; done; printf '%s\n' "$s"; }
|
|
214
|
-
|
|
215
|
-
# Set deploy environment variables
|
|
216
|
-
m "${{ env.PAW_M_cicd_setup_env }}"
|
|
217
|
-
export PATH=$PATH:/usr/local/bin
|
|
218
|
-
export PW=${{ secrets.SERVER_PASSWORD }}
|
|
219
|
-
|
|
220
|
-
# sudo abstraction per SSH auth method
|
|
221
|
-
# password mode: echo $PW | sudo -S (servers that need a sudo password, e.g. Synology)
|
|
222
|
-
# key mode: plain sudo (passwordless-sudo servers, e.g. AWS EC2)
|
|
223
|
-
SSH_AUTH_METHOD="${SSH_AUTH_METHOD:-password}"
|
|
224
|
-
if [ "${SSH_AUTH_METHOD}" = "key" ]; then
|
|
225
|
-
SUDO() { sudo "$@"; }
|
|
226
|
-
else
|
|
227
|
-
SUDO() { echo "$PW" | sudo -S "$@"; }
|
|
228
|
-
fi
|
|
229
|
-
m "${{ env.PAW_M_cicd_ssh_auth }}" method="${SSH_AUTH_METHOD}"
|
|
230
|
-
|
|
231
|
-
BRANCH=${{ github.ref_name }}
|
|
232
|
-
PROJECT_NAME="${{ env.PROJECT_NAME }}"
|
|
233
|
-
|
|
234
|
-
# Per-branch port and container name
|
|
235
|
-
PORT=3000
|
|
236
|
-
CONTAINER_NAME="${PROJECT_NAME}-nextjs"
|
|
237
|
-
|
|
238
|
-
if [ "$BRANCH" == "{{MAIN_BRANCH}}" ]; then
|
|
239
|
-
PORT=${{ secrets.PROJECT_DEPLOY_PORT || '3000' }}
|
|
240
|
-
CONTAINER_NAME="${PROJECT_NAME}-nextjs-deploy"
|
|
241
|
-
m "${{ env.PAW_M_cicd_deploy_start }}" branch="$BRANCH"
|
|
242
|
-
else
|
|
243
|
-
m "${{ env.PAW_M_cicd_branch_unsupported }}" branch="$BRANCH"
|
|
244
|
-
exit 1
|
|
245
|
-
fi
|
|
246
|
-
|
|
247
|
-
m "${{ env.PAW_M_cicd_config_title }}"
|
|
248
|
-
m "${{ env.PAW_M_cicd_config_branch }}" branch="$BRANCH"
|
|
249
|
-
m "${{ env.PAW_M_cicd_config_project }}" project="$PROJECT_NAME"
|
|
250
|
-
m "${{ env.PAW_M_cicd_config_container }}" container="$CONTAINER_NAME"
|
|
251
|
-
m "${{ env.PAW_M_cicd_config_port }}" port="$PORT"
|
|
252
|
-
m "${{ env.PAW_M_cicd_config_image }}" image="${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}"
|
|
253
|
-
|
|
254
|
-
# Pull the Docker image
|
|
255
|
-
m "${{ env.PAW_M_cicd_pull_image_short }}"
|
|
256
|
-
SUDO docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}
|
|
257
|
-
|
|
258
|
-
# Clean up the existing container
|
|
259
|
-
m "${{ env.PAW_M_cicd_container_check }}" container="$CONTAINER_NAME"
|
|
260
|
-
|
|
261
|
-
if SUDO docker ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}\$"; then
|
|
262
|
-
m "${{ env.PAW_M_cicd_container_exists }}" container="$CONTAINER_NAME"
|
|
263
|
-
SUDO docker rm -f $CONTAINER_NAME
|
|
264
|
-
m "${{ env.PAW_M_cicd_container_removed }}" container="$CONTAINER_NAME"
|
|
265
|
-
else
|
|
266
|
-
m "${{ env.PAW_M_cicd_container_none }}" container="$CONTAINER_NAME"
|
|
267
|
-
fi
|
|
268
|
-
|
|
269
|
-
# Start the new container
|
|
270
|
-
m "${{ env.PAW_M_cicd_container_run }}" container="$CONTAINER_NAME"
|
|
271
|
-
|
|
272
|
-
# Next.js needs a Node.js server for SSR
|
|
273
|
-
# With standalone mode, run it with node server.js
|
|
274
|
-
SUDO docker run -d \
|
|
275
|
-
-p ${PORT}:3000 \
|
|
276
|
-
--name $CONTAINER_NAME \
|
|
277
|
-
-e TZ=Asia/Seoul \
|
|
278
|
-
-e NODE_ENV=production \
|
|
279
|
-
-v /etc/localtime:/etc/localtime:ro \
|
|
280
|
-
--restart unless-stopped \
|
|
281
|
-
${{ secrets.DOCKERHUB_USERNAME }}/${PROJECT_NAME}-${{ env.DOCKER_IMAGE_PREFIX }}:${BRANCH}
|
|
282
|
-
|
|
283
|
-
# Confirm the deployment
|
|
284
|
-
m "${{ env.PAW_M_cicd_deploy_done }}"
|
|
285
|
-
echo ""
|
|
286
|
-
m "${{ env.PAW_M_cicd_summary_title }}"
|
|
287
|
-
m "${{ env.PAW_M_cicd_summary_project }}" project="$PROJECT_NAME"
|
|
288
|
-
m "${{ env.PAW_M_cicd_summary_branch }}" branch="$BRANCH"
|
|
289
|
-
m "${{ env.PAW_M_cicd_summary_container }}" container="$CONTAINER_NAME"
|
|
290
|
-
m "${{ env.PAW_M_cicd_summary_port }}" port="$PORT"
|
|
291
|
-
m "${{ env.PAW_M_cicd_summary_time }}" time="$(date '+%Y-%m-%d %H:%M:%S')"
|
|
292
|
-
echo ""
|
|
293
|
-
m "${{ env.PAW_M_cicd_summary_url }}" url="http://${{ secrets.SERVER_HOST }}:${PORT}"
|
|
294
|
-
|
|
295
|
-
# Next.js Dockerfile example (standalone mode)
|
|
296
|
-
#
|
|
297
|
-
# # Stage 1: Dependencies
|
|
298
|
-
# FROM node:20-alpine AS deps
|
|
299
|
-
# WORKDIR /app
|
|
300
|
-
# COPY package*.json ./
|
|
301
|
-
# RUN npm ci --only=production
|
|
302
|
-
#
|
|
303
|
-
# # Stage 2: Builder
|
|
304
|
-
# FROM node:20-alpine AS builder
|
|
305
|
-
# WORKDIR /app
|
|
306
|
-
# COPY --from=deps /app/node_modules ./node_modules
|
|
307
|
-
# COPY . .
|
|
308
|
-
# RUN npm run build
|
|
309
|
-
#
|
|
310
|
-
# # Stage 3: Runner
|
|
311
|
-
# FROM node:20-alpine AS runner
|
|
312
|
-
# WORKDIR /app
|
|
313
|
-
# ENV NODE_ENV production
|
|
314
|
-
#
|
|
315
|
-
# RUN addgroup --system --gid 1001 nodejs
|
|
316
|
-
# RUN adduser --system --uid 1001 nextjs
|
|
317
|
-
#
|
|
318
|
-
# COPY --from=builder /app/public ./public
|
|
319
|
-
# COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
320
|
-
# COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
321
|
-
#
|
|
322
|
-
# USER nextjs
|
|
323
|
-
# EXPOSE 3000
|
|
324
|
-
# ENV PORT 3000
|
|
325
|
-
# CMD ["node", "server.js"]
|
|
326
|
-
#
|
|
327
|
-
# Add the standalone setting to next.config.js:
|
|
328
|
-
# module.exports = {
|
|
329
|
-
# output: 'standalone',
|
|
330
|
-
# }
|