-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP Convert CircleCI config to Github Actions #8147
base: master
Are you sure you want to change the base?
Changes from 2 commits
69a4e4c
4a9811e
d0eed33
53e35c4
53d1c23
eb8af0b
1d77e3c
03c1cbf
7acf3a9
9521869
633b9bf
267d646
188753d
47e66d6
f69e1c9
98337a4
da87a2a
a15f95c
5a2766f
35e7381
e81a452
e3bd804
d12c110
46aafa2
b91701d
c15cc6b
e3c6b4d
543bba1
f25cca0
e6de5cb
816989d
495296e
d9322ce
035f5a3
b162be2
6c06ca3
18b7cb4
77d54be
46f6696
e864dbb
c9f8868
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#!/usr/bin/env bash | ||
set -Eeuo pipefail | ||
|
||
if [ "${GITHUB_REF}" == "master" ]; then | ||
echo "Skipping this step on master..." | ||
else | ||
exec "$@" | ||
fi |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,13 +1,208 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||
name: CI Pipeline | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
on: | ||||||||||||||||||||||||||||||||||||||||||||||||||
push: | ||||||||||||||||||||||||||||||||||||||||||||||||||
branches: | ||||||||||||||||||||||||||||||||||||||||||||||||||
- '*' | ||||||||||||||||||||||||||||||||||||||||||||||||||
pull_request: | ||||||||||||||||||||||||||||||||||||||||||||||||||
branches: | ||||||||||||||||||||||||||||||||||||||||||||||||||
- '*' | ||||||||||||||||||||||||||||||||||||||||||||||||||
workflow_dispatch: | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
env: | ||||||||||||||||||||||||||||||||||||||||||||||||||
USER_NAME: circleci | ||||||||||||||||||||||||||||||||||||||||||||||||||
USER_UID: 1000 | ||||||||||||||||||||||||||||||||||||||||||||||||||
USER_GID: 1000 | ||||||||||||||||||||||||||||||||||||||||||||||||||
TZ: Europe/Berlin | ||||||||||||||||||||||||||||||||||||||||||||||||||
DOCKER_USER: ${{ secrets.DOCKER_USER }} | ||||||||||||||||||||||||||||||||||||||||||||||||||
DOCKER_PASS: ${{ secrets.DOCKER_PASS }} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
jobs: | ||||||||||||||||||||||||||||||||||||||||||||||||||
foo: | ||||||||||||||||||||||||||||||||||||||||||||||||||
static_frontent_code_checks: | ||||||||||||||||||||||||||||||||||||||||||||||||||
runs-on: ubuntu-20.04 | ||||||||||||||||||||||||||||||||||||||||||||||||||
steps: | ||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Checkout code | ||||||||||||||||||||||||||||||||||||||||||||||||||
uses: actions/checkout@v3 | ||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||
fetch-depth: 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||
fetch-depth: 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- uses: actions/setup-node@v4 | ||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||
node-version: 18 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Install frontend dependencies | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: corepack enable && yarn install --immutable | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Lint frontend code and check formatting | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: yarn run check-frontend | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Typecheck frontend code | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: yarn typecheck | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Check for cyclic dependencies in frontend | ||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+41
to
+48
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add error handling to frontend checks The frontend check commands should fail fast if any check fails. Add proper error handling: - name: Lint frontend code and check formatting
run: |
+ set -euo pipefail
yarn run check-frontend
- name: Typecheck frontend code
run: |
+ set -euo pipefail
yarn typecheck
- name: Check for cyclic dependencies in frontend
run: |
+ set -euo pipefail
yarn check-cyclic-dependencies 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||
run: yarn check-cyclic-dependencies | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
build_test_deploy: | ||||||||||||||||||||||||||||||||||||||||||||||||||
runs-on: ubuntu-20.04 | ||||||||||||||||||||||||||||||||||||||||||||||||||
steps: | ||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Checkout code | ||||||||||||||||||||||||||||||||||||||||||||||||||
uses: actions/checkout@v3 | ||||||||||||||||||||||||||||||||||||||||||||||||||
with: | ||||||||||||||||||||||||||||||||||||||||||||||||||
fetch-depth: 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: "Custom environment variables" | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
if [[ ${{ github.ref_type }} == "branch" ]]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||
NORMALIZED_BRANCH=$(echo ${{ github.ref_name }} | sed 's/[\/-]/_/g') | ||||||||||||||||||||||||||||||||||||||||||||||||||
echo "NORMALIZED_BRANCH=$NORMALIZED_BRANCH" >> $GITHUB_ENV | ||||||||||||||||||||||||||||||||||||||||||||||||||
DOCKER_TAG="${NORMALIZED_BRANCH}__${{ github.run_number }}" | ||||||||||||||||||||||||||||||||||||||||||||||||||
echo "DOCKER_TAG=$DOCKER_TAG" >> $GITHUB_ENV | ||||||||||||||||||||||||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||||||||||||||||||||||||
echo "NORMALIZED_BRANCH=master" >> $GITHUB_ENV | ||||||||||||||||||||||||||||||||||||||||||||||||||
echo "DOCKER_TAG=${{ github.ref_name }}" >> $GITHUB_ENV | ||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+80
to
+90
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix shell script quoting issues The branch normalization script has potential issues with word splitting. Apply proper quoting: if [[ ${{ github.ref_type }} == "branch" ]]; then
- NORMALIZED_BRANCH=$(echo ${{ github.ref_name }} | sed 's/[\/-]/_/g')
+ NORMALIZED_BRANCH=$(echo "${{ github.ref_name }}" | sed 's/[\/-]/_/g')
- echo "NORMALIZED_BRANCH=$NORMALIZED_BRANCH" >> $GITHUB_ENV
+ echo "NORMALIZED_BRANCH=${NORMALIZED_BRANCH}" >> "${GITHUB_ENV}"
- DOCKER_TAG="${NORMALIZED_BRANCH}__${{ github.run_number }}"
+ DOCKER_TAG="${NORMALIZED_BRANCH}__${{ github.run_number }}"
- echo "DOCKER_TAG=$DOCKER_TAG" >> $GITHUB_ENV
+ echo "DOCKER_TAG=${DOCKER_TAG}" >> "${GITHUB_ENV}" 📝 Committable suggestion
Suggested change
🧰 Tools🪛 actionlint
|
||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Set up Docker | ||||||||||||||||||||||||||||||||||||||||||||||||||
uses: docker/setup-buildx-action@v2 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos-dev docker image | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker pull scalableminds/webknossos-dev:$NORMALIZED_BRANCH || true | ||||||||||||||||||||||||||||||||||||||||||||||||||
DEV_CACHE=$NORMALIZED_BRANCH docker compose build base | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Prepare dependency folders | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: mkdir -p project/target target ~/.ivy2 ~/.cache/coursier | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Install frontend dependencies | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose run -e PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true base yarn install --immutable | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Assert unique evolution numbers | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose run base tools/postgres/dbtool.js assert-unique-evolution-numbers | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Assert schema.sql and evolutions are equal | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose up -d postgres | ||||||||||||||||||||||||||||||||||||||||||||||||||
sleep 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose run compile tools/postgres/dbtool.js check-evolutions-schema | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Replace sleep with proper postgres readiness check Using - sleep 3
+ until docker compose exec -T postgres pg_isready; do
+ echo "Waiting for postgres..."
+ sleep 1
+ done 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build frontend documentation | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
WK_VERSION=${{ github.event.release.tag_name || github.run_number || 'dev' }} | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose run base yarn run docs --project-version $WK_VERSION | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos (webpack) | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose run base yarn build | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos (sbt) | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
if [ "${{ github.ref }}" == "refs/heads/master" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose run compile sbt -no-colors clean compile stage | ||||||||||||||||||||||||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose run compile sbt -no-colors -DfailOnWarning compile stage | ||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos-datastore (sbt) | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose run base sbt -no-colors -DfailOnWarning "project webknossosDatastore" copyMessages compile stage | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos-tracingstore (sbt) | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose run base sbt -no-colors -DfailOnWarning "project webknossosTracingstore" copyMessages compile stage | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider parallelizing build steps The build steps for webknossos, datastore, and tracingstore are running sequentially. Consider using GitHub Actions' job parallelization to speed up the pipeline:
Example structure: jobs:
build-webknossos:
# ... build webknossos
outputs:
checksum: ${{ steps.checksum.outputs.value }}
build-datastore:
needs: build-webknossos
# ... build datastore
build-tracingstore:
needs: build-webknossos
# ... build tracingstore
tests:
needs: [build-webknossos, build-datastore, build-tracingstore]
# ... run tests |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Checksum App Dirs | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: find app webknossos-datastore/app webknossos-tracingstore/app -type f -exec md5sum {} \; | sort -k 2 | md5sum > app_checksum.txt | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos docker image | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker pull scalableminds/webknossos:$NORMALIZED_BRANCH || true | ||||||||||||||||||||||||||||||||||||||||||||||||||
DEV_CACHE=$NORMALIZED_BRANCH docker compose build --pull webknossos | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos-datastore docker image | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose build --pull webknossos-datastore | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Build webknossos-tracingstore docker image | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Optimize Docker builds with layer caching Consider using BuildKit's cache features to speed up builds: - run: docker compose build --pull webknossos-datastore
+ run: |
+ DOCKER_BUILDKIT=1 docker compose build \
+ --pull \
+ --build-arg BUILDKIT_INLINE_CACHE=1 \
+ webknossos-datastore 📝 Committable suggestion
Suggested change
🧰 Tools🪛 actionlint
|
||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose build --pull webknossos-tracingstore | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Run frontend tests | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: .github/not-on-master.sh docker compose run base yarn test-verbose | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Lint backend code and check formatting | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: .github/not-on-master.sh docker compose run backend-lint-format | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Run backend tests | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: .github/not-on-master.sh docker compose run backend-tests | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Run end-to-end tests | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
for i in {1..3}; do # retry | ||||||||||||||||||||||||||||||||||||||||||||||||||
.github/not-on-master.sh docker compose run e2e-tests && s=0 && break || s=$? | ||||||||||||||||||||||||||||||||||||||||||||||||||
done | ||||||||||||||||||||||||||||||||||||||||||||||||||
(exit $s) | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Fix shell script quoting in retry logic The retry logic needs proper quoting and error handling: run: |
+ set -euo pipefail
for i in {1..3}; do # retry
- .github/not-on-master.sh docker compose run e2e-tests && s=0 && break || s=$?
+ if .github/not-on-master.sh docker compose run e2e-tests; then
+ s=0
+ break
+ else
+ s=$?
+ fi
done
- (exit $s)
+ (exit "${s}") 📝 Committable suggestion
Suggested change
🧰 Tools🪛 actionlint180-180: shellcheck reported issue in this script: SC2034:warning:1:1: i appears unused. Verify use (or export if used externally) (shellcheck) 180-180: shellcheck reported issue in this script: SC2086:info:4:7: Double quote to prevent globbing and word splitting (shellcheck) |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Validate frontend types | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove duplicate type checking The frontend type checking is already performed in the Consider removing this duplicate step to improve pipeline performance. |
||||||||||||||||||||||||||||||||||||||||||||||||||
run: .github/not-on-master.sh docker compose run base yarn typecheck | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Start webknossos, datastore, and tracingstore | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose up -d webknossos | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose up -d webknossos-datastore | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker compose up -d webknossos-tracingstore | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Run webknossos smoke test | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
for i in {1..20}; do # retry | ||||||||||||||||||||||||||||||||||||||||||||||||||
curl --fail -v http://localhost:9000/api/health && s=0 && break || s=$? | ||||||||||||||||||||||||||||||||||||||||||||||||||
sleep 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||
done | ||||||||||||||||||||||||||||||||||||||||||||||||||
(exit $s) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Run webknossos-datastore smoke test | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
for i in {1..20}; do # retry | ||||||||||||||||||||||||||||||||||||||||||||||||||
curl --fail -v http://localhost:9090/data/health && s=0 && break || s=$? | ||||||||||||||||||||||||||||||||||||||||||||||||||
sleep 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||
done | ||||||||||||||||||||||||||||||||||||||||||||||||||
(exit $s) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Run webknossos-tracingstore smoke test | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
for i in {1..20}; do # retry | ||||||||||||||||||||||||||||||||||||||||||||||||||
curl --fail -v http://localhost:9050/tracings/health && s=0 && break || s=$? | ||||||||||||||||||||||||||||||||||||||||||||||||||
sleep 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||
done | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Refactor duplicated health check logic The health check implementation is duplicated across three services. Consider extracting this into a reusable composite action:
name: 'Health Check'
description: 'Performs health check with retries'
inputs:
url:
description: 'Health check URL'
required: true
runs:
using: 'composite'
steps:
- shell: bash
run: |
for i in {1..20}; do
curl --fail -v "${{ inputs.url }}" && exit 0
sleep 5
done
exit 1
- uses: ./.github/actions/health-check
with:
url: http://localhost:9000/api/health 🧰 Tools🪛 actionlint
|
||||||||||||||||||||||||||||||||||||||||||||||||||
(exit $s) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Stop webknossos, datastore, and tracingstore | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: docker compose down --volumes --remove-orphans | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Push docker images | ||||||||||||||||||||||||||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||||||||||||||||||||||||||
function retry() { | ||||||||||||||||||||||||||||||||||||||||||||||||||
for i in {1..5}; do | ||||||||||||||||||||||||||||||||||||||||||||||||||
"$@" && s=0 && break || s=$? | ||||||||||||||||||||||||||||||||||||||||||||||||||
sleep 10 | ||||||||||||||||||||||||||||||||||||||||||||||||||
done | ||||||||||||||||||||||||||||||||||||||||||||||||||
return $s | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider using GitHub Actions' built-in retry functionality Instead of implementing a custom retry function, consider using GitHub Actions' built-in retry functionality with the - uses: nick-invision/retry@v2
with:
timeout_minutes: 10
max_attempts: 5
command: docker login -u "${DOCKER_USER}" -p "${DOCKER_PASS}" This approach provides better logging and integration with GitHub Actions. |
||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker login -u $DOCKER_USER -p $DOCKER_PASS | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker compose push webknossos | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker compose push webknossos-datastore | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker compose push webknossos-tracingstore | ||||||||||||||||||||||||||||||||||||||||||||||||||
if [[ ${{ github.ref_type }} == "branch" ]]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker tag scalableminds/webknossos:${DOCKER_TAG} scalableminds/webknossos:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker push scalableminds/webknossos:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker tag scalableminds/webknossos-datastore:${DOCKER_TAG} scalableminds/webknossos-datastore:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker push scalableminds/webknossos-datastore:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker tag scalableminds/webknossos-tracingstore:${DOCKER_TAG} scalableminds/webknossos-tracingstore:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker push scalableminds/webknossos-tracingstore:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
docker tag scalableminds/webknossos-dev scalableminds/webknossos-dev:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
retry docker push scalableminds/webknossos-dev:${NORMALIZED_BRANCH} | ||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix shell script issues in Docker operations The Docker operations script has multiple quoting and error handling issues. function retry() {
+ local cmd=("$@")
for i in {1..5}; do
- "$@" && s=0 && break || s=$?
+ if "${cmd[@]}"; then
+ return 0
+ fi
sleep 10
done
- return $s
+ return 1
}
-retry docker login -u $DOCKER_USER -p $DOCKER_PASS
+retry docker login -u "${DOCKER_USER}" -p "${DOCKER_PASS}"
retry docker compose push webknossos
retry docker compose push webknossos-datastore
retry docker compose push webknossos-tracingstore
if [[ ${{ github.ref_type }} == "branch" ]]; then
- docker tag scalableminds/webknossos:${DOCKER_TAG} scalableminds/webknossos:${NORMALIZED_BRANCH}
+ docker tag "scalableminds/webknossos:${DOCKER_TAG}" "scalableminds/webknossos:${NORMALIZED_BRANCH}"
# Similar fixes for other docker commands
fi
🧰 Tools🪛 actionlint211-211: shellcheck reported issue in this script: SC2034:warning:2:3: i appears unused. Verify use (or export if used externally) (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:6:10: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:8:23: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:8:39: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:13:39: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:13:78: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:14:46: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:15:49: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:15:98: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:16:56: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:17:52: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:17:104: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:18:59: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:19:72: Double quote to prevent globbing and word splitting (shellcheck) 211-211: shellcheck reported issue in this script: SC2086:info:20:50: Double quote to prevent globbing and word splitting (shellcheck) |
||||||||||||||||||||||||||||||||||||||||||||||||||
docker logout | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consolidate Docker push retry logic The Docker push steps have complex retry logic. Consider:
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKER_USER }}
password: ${{ env.DOCKER_PASS }}
- name: Push images
uses: nick-invision/retry@v2
with:
timeout_minutes: 10
max_attempts: 3
command: |
docker compose push webknossos
docker compose push webknossos-datastore
docker compose push webknossos-tracingstore
if [[ ${{ github.ref_type }} == "branch" ]]; then
# ... tag and push branch images
fi 🧰 Tools🪛 actionlint
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That sound great. Please do it! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @hotzenklotz, glad you like the suggestion! Here's the updated workflow with the consolidated Docker push retry logic: name: CI Pipeline
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
workflow_dispatch:
env:
USER_NAME: circleci
USER_UID: 1000
USER_GID: 1000
TZ: Europe/Berlin
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
jobs:
static_frontent_code_checks:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 5
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install frontend dependencies
run: corepack enable && yarn install --immutable
- name: Lint frontend code and check formatting
run: yarn run check-frontend
- name: Typecheck frontend code
run: yarn typecheck
- name: Check for cyclic dependencies in frontend
run: yarn check-cyclic-dependencies
build_test_deploy:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 5
- name: "Custom environment variables"
run: |
if [[ ${{ github.ref_type }} == "branch" ]]; then
NORMALIZED_BRANCH=$(echo ${{ github.ref_name }} | sed 's/[\/-]/_/g')
echo "NORMALIZED_BRANCH=$NORMALIZED_BRANCH" >> $GITHUB_ENV
DOCKER_TAG="${NORMALIZED_BRANCH}__${{ github.run_number }}"
echo "DOCKER_TAG=$DOCKER_TAG" >> $GITHUB_ENV
else
echo "NORMALIZED_BRANCH=master" >> $GITHUB_ENV
echo "DOCKER_TAG=${{ github.ref_name }}" >> $GITHUB_ENV
fi
- name: Set up Docker
uses: docker/setup-buildx-action@v2
# ... other build and test steps ...
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKER_USER }}
password: ${{ env.DOCKER_PASS }}
- name: Push docker images
uses: nick-invision/retry@v2
with:
timeout_minutes: 10
max_attempts: 3
command: |
docker compose push webknossos
docker compose push webknossos-datastore
docker compose push webknossos-tracingstore
if [[ ${{ github.ref_type }} == "branch" ]]; then
docker tag scalableminds/webknossos:${{ env.DOCKER_TAG }} scalableminds/webknossos:${{ env.NORMALIZED_BRANCH }}
docker push scalableminds/webknossos:${{ env.NORMALIZED_BRANCH }}
docker tag scalableminds/webknossos-datastore:${{ env.DOCKER_TAG }} scalableminds/webknossos-datastore:${{ env.NORMALIZED_BRANCH }}
docker push scalableminds/webknossos-datastore:${{ env.NORMALIZED_BRANCH }}
docker tag scalableminds/webknossos-tracingstore:${{ env.DOCKER_TAG }} scalableminds/webknossos-tracingstore:${{ env.NORMALIZED_BRANCH }}
docker push scalableminds/webknossos-tracingstore:${{ env.NORMALIZED_BRANCH }}
docker tag scalableminds/webknossos-dev scalableminds/webknossos-dev:${{ env.NORMALIZED_BRANCH }}
docker push scalableminds/webknossos-dev:${{ env.NORMALIZED_BRANCH }}
fi
- name: Logout from Docker Hub
run: docker logout
# ... remaining steps ...
This update simplifies the retry logic by utilizing the Let me know if you have any questions or need further assistance! (^‿^)/ |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
- name: Report coverage | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Don't silently ignore coverage failures The coverage command ignores failures with Consider:
- run: .github/not-on-master.sh docker compose run base yarn coverage || true
+ run: |
+ .github/not-on-master.sh docker compose run base yarn coverage
+ continue-on-error: true
|
||||||||||||||||||||||||||||||||||||||||||||||||||
run: .github/not-on-master.sh docker compose run base yarn coverage || true | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
# - name: Send Slack notification (master only) | ||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+235
to
+236
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider implementing GitHub Actions native Slack integration. Instead of using the CircleCI script, implement Slack notifications using GitHub Actions: - name: Notify Slack
if: github.ref == 'refs/heads/master'
uses: slackapi/[email protected]
with:
channel-id: 'CHANNEL_ID'
slack-message: "GitHub Action build result: ${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} |
||||||||||||||||||||||||||||||||||||||||||||||||||
# run: .circleci/slack-notification.sh |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add yarn cache to improve CI performance
Consider using GitHub's cache action for yarn dependencies to speed up the CI pipeline.
📝 Committable suggestion