Skip to content

Commit 9b40bb2

Browse files
committed
Improvements to CI: comment on PR when syntax checking fails
1 parent c812b67 commit 9b40bb2

File tree

3 files changed

+59
-56
lines changed

3 files changed

+59
-56
lines changed

Jenkinsfile

+34-54
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
import groovy.transform.Field
2+
3+
@Field
4+
def shOutput = ""
5+
def buildxPushTags = ""
6+
17
pipeline {
28
agent {
39
label 'docker-multiarch'
@@ -16,6 +22,8 @@ pipeline {
1622
COMPOSE_FILE = 'docker/docker-compose.ci.yml'
1723
COMPOSE_INTERACTIVE_NO_CLI = 1
1824
BUILDX_NAME = "${COMPOSE_PROJECT_NAME}"
25+
DOCS_BUCKET = 'jc21-npm-site'
26+
DOCS_CDN = 'EN1G6DEWZUTDT'
1927
}
2028
stages {
2129
stage('Environment') {
@@ -26,7 +34,7 @@ pipeline {
2634
}
2735
steps {
2836
script {
29-
env.BUILDX_PUSH_TAGS = "-t docker.io/jc21/${IMAGE}:${BUILD_VERSION} -t docker.io/jc21/${IMAGE}:${MAJOR_VERSION} -t docker.io/jc21/${IMAGE}:latest"
37+
buildxPushTags = "-t docker.io/jc21/${IMAGE}:${BUILD_VERSION} -t docker.io/jc21/${IMAGE}:${MAJOR_VERSION} -t docker.io/jc21/${IMAGE}:latest"
3038
}
3139
}
3240
}
@@ -39,7 +47,7 @@ pipeline {
3947
steps {
4048
script {
4149
// Defaults to the Branch name, which is applies to all branches AND pr's
42-
env.BUILDX_PUSH_TAGS = "-t docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}"
50+
buildxPushTags = "-t docker.io/jc21/${IMAGE}:github-${BRANCH_LOWER}"
4351
}
4452
}
4553
}
@@ -54,35 +62,28 @@ pipeline {
5462
}
5563
}
5664
}
57-
stage('Frontend') {
65+
stage('Build and Test') {
5866
steps {
59-
sh './scripts/frontend-build'
67+
script {
68+
// Frontend and Backend
69+
def shStatusCode = sh(label: 'Checking and Building', returnStatus: true, script: '''
70+
set -e
71+
./scripts/ci/frontend-build > ${WORKSPACE}/tmp-sh-build 2>&1
72+
./scripts/ci/test-and-build > ${WORKSPACE}/tmp-sh-build 2>&1
73+
''')
74+
shOutput = readFile "${env.WORKSPACE}/tmp-sh-build"
75+
if (shStatusCode != 0) {
76+
error "${shOutput}"
77+
}
78+
}
6079
}
61-
}
62-
stage('Backend') {
63-
steps {
64-
echo 'Checking Syntax ...'
65-
sh 'docker pull nginxproxymanager/nginx-full:certbot-node'
66-
// See: https://github.com/yarnpkg/yarn/issues/3254
67-
sh '''docker run --rm \\
68-
-v "$(pwd)/backend:/app" \\
69-
-v "$(pwd)/global:/app/global" \\
70-
-w /app \\
71-
nginxproxymanager/nginx-full:certbot-node \\
72-
sh -c "yarn install && yarn eslint . && rm -rf node_modules"
73-
'''
74-
75-
echo 'Docker Build ...'
76-
sh '''docker build --pull --no-cache --squash --compress \\
77-
-t "${IMAGE}:ci-${BUILD_NUMBER}" \\
78-
-f docker/Dockerfile \\
79-
--build-arg TARGETPLATFORM=linux/amd64 \\
80-
--build-arg BUILDPLATFORM=linux/amd64 \\
81-
--build-arg BUILD_VERSION="${BUILD_VERSION}" \\
82-
--build-arg BUILD_COMMIT="${BUILD_COMMIT}" \\
83-
--build-arg BUILD_DATE="$(date '+%Y-%m-%d %T %Z')" \\
84-
.
85-
'''
80+
post {
81+
always {
82+
sh 'rm -f ${WORKSPACE}/tmp-sh-build'
83+
}
84+
failure {
85+
npmGithubPrComment("CI Error:\n\n```\n${shOutput}\n```", true)
86+
}
8687
}
8788
}
8889
stage('Integration Tests Sqlite') {
@@ -164,10 +165,8 @@ pipeline {
164165
}
165166
steps {
166167
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
167-
// Docker Login
168-
sh "docker login -u '${duser}' -p '${dpass}'"
169-
// Buildx with push from cache
170-
sh "./scripts/buildx --push ${BUILDX_PUSH_TAGS}"
168+
sh 'docker login -u "${duser}" -p "${dpass}"'
169+
sh "./scripts/buildx --push ${buildxPushTags}"
171170
}
172171
}
173172
}
@@ -181,26 +180,7 @@ pipeline {
181180
}
182181
}
183182
steps {
184-
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'AWS_ACCESS_KEY_ID', credentialsId: 'npm-s3-docs', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
185-
sh """docker run --rm \\
186-
--name \${COMPOSE_PROJECT_NAME}-docs-upload \\
187-
-e S3_BUCKET=jc21-npm-site \\
188-
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \\
189-
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \\
190-
-v \$(pwd):/app \\
191-
-w /app \\
192-
jc21/ci-tools \\
193-
scripts/docs-upload /app/docs/.vuepress/dist/
194-
"""
195-
196-
sh """docker run --rm \\
197-
--name \${COMPOSE_PROJECT_NAME}-docs-invalidate \\
198-
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \\
199-
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \\
200-
jc21/ci-tools \\
201-
aws cloudfront create-invalidation --distribution-id EN1G6DEWZUTDT --paths '/*'
202-
"""
203-
}
183+
npmDocsRelease("$DOCS_BUCKET", "$DOCS_CDN")
204184
}
205185
}
206186
stage('PR Comment') {
@@ -214,7 +194,7 @@ pipeline {
214194
}
215195
steps {
216196
script {
217-
def comment = pullRequest.comment("This is an automated message from CI:\n\nDocker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`\n\n**Note:** ensure you backup your NPM instance before testing this PR image! Especially if this PR contains database changes.")
197+
npmGithubPrComment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`\n\n**Note:** ensure you backup your NPM instance before testing this PR image! Especially if this PR contains database changes.", true)
218198
}
219199
}
220200
}

scripts/frontend-build scripts/ci/frontend-build

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#!/bin/bash -e
22

33
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4-
. "$DIR/.common.sh"
4+
. "$DIR/../.common.sh"
55

66
DOCKER_IMAGE=nginxproxymanager/nginx-full:certbot-node
77

88
# Ensure docker exists
99
if hash docker 2>/dev/null; then
1010
docker pull "${DOCKER_IMAGE}"
11-
cd "${DIR}/.."
11+
cd "${DIR}/../.."
1212
echo -e "${BLUE}${CYAN}Building Frontend ...${RESET}"
1313
docker run --rm -e CI=true -v "$(pwd)/frontend:/app/frontend" -v "$(pwd)/global:/app/global" -w /app/frontend "$DOCKER_IMAGE" sh -c "yarn install && yarn build && yarn build && chown -R $(id -u):$(id -g) /app/frontend"
1414
echo -e "${BLUE}${GREEN}Building Frontend Complete${RESET}"

scripts/ci/test-and-build

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/bin/bash -e
2+
3+
DOCKER_IMAGE=nginxproxymanager/nginx-full:certbot-node
4+
docker pull "${DOCKER_IMAGE}"
5+
6+
# Test
7+
docker run --rm \
8+
-v "$(pwd)/backend:/app" \
9+
-v "$(pwd)/global:/app/global" \
10+
-w /app \
11+
"${DOCKER_IMAGE}" \
12+
sh -c 'yarn install && yarn eslint . && rm -rf node_modules'
13+
14+
# Build
15+
docker build --pull --no-cache --squash --compress \
16+
-t "${IMAGE}:ci-${BUILD_NUMBER}" \
17+
-f docker/Dockerfile \
18+
--build-arg TARGETPLATFORM=linux/amd64 \
19+
--build-arg BUILDPLATFORM=linux/amd64 \
20+
--build-arg BUILD_VERSION="${BUILD_VERSION}" \
21+
--build-arg BUILD_COMMIT="${BUILD_COMMIT}" \
22+
--build-arg BUILD_DATE="$(date '+%Y-%m-%d %T %Z')" \
23+
.

0 commit comments

Comments
 (0)