snyk-docker-plugin
Version:
Snyk CLI docker plugin
332 lines (320 loc) • 8.7 kB
YAML
version: 2.1
orbs:
win: circleci/windows@5.0.0
node: circleci/node@5.1.0
slack: circleci/slack@5
prodsec: snyk/prodsec-orb@1
defaults:
resource_class: small
docker:
- image: cimg/node:20.19
working_directory: ~/snyk-docker-plugin
windows_defaults:
executor:
name: win/default
shell: bash.exe
parameters:
node_version:
type: string
default: ""
working_directory: ~/snyk-docker-plugin
slack-fail-notify: &slack-fail-notify
slack/notify:
event: fail
channel: team-container-pipeline-info
branch_pattern: "main"
template: basic_fail_1
slack-success-notify: &slack-success-notify
slack/notify:
event: pass
channel: team-container-pipeline-info
branch_pattern: "main"
template: basic_success_1
windows_big:
executor:
name: win/server-2022
shell: bash.exe
size: large
# we've pinned the version because without it, it uses "current" (at the time of writing, "2023.06.1"),
# which has a broken Docker installation. See https://discuss.circleci.com/t/build-failures-when-running-docker-on-junes-windows-executor/48605
# TODO: check if it works again with the next release and unpin the version.
version: "2023.05.1"
parameters:
node_version:
type: string
default: ""
working_directory: ~/snyk-docker-plugin
release_defaults:
resource_class: small
docker:
- image: cimg/node:20.19
working_directory: ~/snyk-docker-plugin
define: &windows_node_version "20.19.1"
commands:
setup_npm_user:
steps:
- run:
command: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" >> .npmrc
install_deps:
description: Install dependencies
steps:
- checkout
- restore_cache:
keys:
- v2-npm-cache-{{ checksum "package.json" }}
- v2-npm-cache-
- setup_npm_user
- run: npm ci
- save_cache:
key: v2-npm-cache-{{ checksum "package.json" }}
paths:
- ~/.npm
- persist_to_workspace:
root: .
paths:
- node_modules/
checkout_and_merge:
steps:
- checkout
- run:
name: Checkout main
command: git checkout origin/main
- run:
name: Merge test branch
command: |
git config user.name "CircleCI"
git config user.email "noop"
git merge --no-edit "$CIRCLE_BRANCH"
- attach_workspace:
at: ~/snyk-docker-plugin
install_node_npm:
description: Install specific Node version
parameters:
node_version:
type: string
default: ""
steps:
- node/install:
node-version: << parameters.node_version >>
- run:
name: Use currently installed node version
command: nvm list | awk '/<< parameters.node_version >>/ {print $1}' | xargs nvm use
jobs:
security-scans:
<<:
steps:
- checkout
- install_deps
- attach_workspace:
at: ~/snyk-docker-plugin
- prodsec/security_scans:
mode: auto
open-source-additional-arguments: --exclude=test
iac-scan: disabled
install:
<<:
steps:
- install_deps
lint:
<<:
steps:
- checkout
- attach_workspace:
at: ~/snyk-docker-plugin
- run: npm run lint
test:
<<:
steps:
- checkout
- setup_remote_docker
- attach_workspace:
at: ~/snyk-docker-plugin
- run: npm run test-jest > test-logs.txt 2>&1
- store_artifacts:
path: test-logs.txt
destination: test-logs
test_jest_windows_with_docker:
<<:
steps:
- checkout
- install_node_npm:
node_version: << parameters.node_version >>
- setup_npm_user
- run: npm ci
- run: docker version
- run:
command: npm run test-jest-windows
no_output_timeout: 20m
test_jest_windows_no_docker:
<<:
steps:
- checkout
- install_node_npm:
node_version: << parameters.node_version >>
- setup_npm_user
- run: npm ci
# make docker appear to be broken.
- run: "function docker() { return 1; }"
- run:
command: npm run test-jest-windows
no_output_timeout: 20m
build:
<<:
steps:
- checkout_and_merge
- setup_npm_user
- run: npm ci
- run: npm run build
build_cli:
<<:
resource_class: medium
steps:
- checkout_and_merge
- run:
name: Setup NPM credentials
command: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" >> ../.npmrc
- run:
name: Build Snyk CLI with latest changes
command: ./.circleci/build-cli.sh
build_and_test_latest_go_binary:
<<:
resource_class: medium
steps:
- setup_remote_docker
- checkout_and_merge
- run:
name: Build a Go binary with latest Go version
command: ./.circleci/build-go-binary-latest.sh
- run:
name: Run Go binaries unit test
command: npx jest test/unit/go-binaries.spec.ts
release:
<<:
steps:
- checkout
- setup_npm_user
- run: npm ci
- run: npm run build
- run:
name: Release on GitHub
command: npx semantic-release@19.0.5
workflows:
version: 2
test_and_release:
when:
# do not run on a pipeline schedule
not:
equal: [scheduled_pipeline, << pipeline.trigger_source >>]
jobs:
- prodsec/secrets-scan:
name: Scan repository for secrets
context:
- snyk-bot-slack
channel: snyk-vuln-alerts-container
filters:
branches:
ignore: main
- install:
name: Install
context:
- nodejs-install
- lint:
name: Lint
context:
- nodejs-install
- snyk-bot-slack
requires:
- Install
post-steps:
- *slack-fail-notify
- build:
name: Build
context:
- nodejs-install
- snyk-bot-slack
requires:
- Lint
post-steps:
- *slack-fail-notify
- security-scans:
name: Security Scans
context: infrasec_container
post-steps:
- *slack-fail-notify
- test:
name: Test
context:
- nodejs-install
- snyk-bot-slack
requires:
- Build
post-steps:
- *slack-fail-notify
- test_jest_windows_with_docker:
name: Test Jest Windows with Docker
context:
- nodejs-install
- snyk-bot-slack
node_version:
requires:
- Build
post-steps:
- *slack-fail-notify
- test_jest_windows_no_docker:
name: Test Jest Windows no Docker
context:
- nodejs-install
- snyk-bot-slack
node_version:
requires:
- Build
post-steps:
- *slack-fail-notify
- build_cli:
name: Build CLI with changes
context:
- nodejs-install
- snyk-bot-slack
requires:
- Build
post-steps:
- *slack-fail-notify
- release:
name: Release to GitHub
context:
- nodejs-lib-release
- snyk-bot-slack
filters:
branches:
only:
- main
requires:
- Lint
- Build
- Security Scans
- Test
- Test Jest Windows with Docker
- Test Jest Windows no Docker
post-steps:
- *slack-fail-notify
- *slack-success-notify
go_regression_test:
when:
and:
- equal: [scheduled_pipeline, << pipeline.trigger_source >>]
- equal: ["Build and test Go binaries", << pipeline.schedule.name >>]
jobs:
- install:
name: Install
context:
- nodejs-install
post-steps:
- *slack-fail-notify
- build_and_test_latest_go_binary:
name: Build Go binary
context:
- nodejs-install
requires:
- Install
post-steps:
- *slack-fail-notify