mirror of
https://github.com/anchore/syft
synced 2024-11-10 06:14:16 +00:00
add gha pipeline to replace circlei pipeline (#202)
Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
parent
e6b71486b0
commit
16b23e7994
3 changed files with 104 additions and 140 deletions
|
@ -1,129 +0,0 @@
|
||||||
version: 2.1
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run-static-analysis:
|
|
||||||
parameters:
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
docker:
|
|
||||||
- image: circleci/golang:<< parameters.version >>
|
|
||||||
environment:
|
|
||||||
GO111MODULE: "on"
|
|
||||||
# work around for recent circle CI breaking change
|
|
||||||
# Error: "Error response from daemon: client version 1.39 is too new. Maximum supported API version is 1.38"
|
|
||||||
DOCKER_API_VERSION: "1.38"
|
|
||||||
# 2CPU / 4GB RAM
|
|
||||||
resource_class: medium
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
|
|
||||||
- restore_cache:
|
|
||||||
keys:
|
|
||||||
- go-<< parameters.version >>-{{ checksum "go.sum" }}-{{ checksum "Makefile" }}
|
|
||||||
|
|
||||||
- run: make ci-bootstrap
|
|
||||||
|
|
||||||
- save_cache:
|
|
||||||
key: go-<< parameters.version >>-{{ checksum "go.sum" }}-{{ checksum "Makefile" }}
|
|
||||||
paths:
|
|
||||||
- "/go/pkg/mod"
|
|
||||||
- ".tmp"
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: run static analysis
|
|
||||||
command: make static-analysis
|
|
||||||
|
|
||||||
run-tests:
|
|
||||||
parameters:
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
docker:
|
|
||||||
- image: circleci/golang:<< parameters.version >>
|
|
||||||
environment:
|
|
||||||
GO111MODULE: "on"
|
|
||||||
# work around for recent circle CI breaking change
|
|
||||||
# Error: "Error response from daemon: client version 1.39 is too new. Maximum supported API version is 1.38"
|
|
||||||
DOCKER_API_VERSION: "1.38"
|
|
||||||
# 2CPU / 4GB RAM
|
|
||||||
resource_class: medium
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
|
|
||||||
- restore_cache:
|
|
||||||
keys:
|
|
||||||
- go-<< parameters.version >>-{{ checksum "go.sum" }}-{{ checksum "Makefile" }}
|
|
||||||
|
|
||||||
- run: make ci-bootstrap
|
|
||||||
|
|
||||||
- save_cache:
|
|
||||||
key: go-<< parameters.version >>-{{ checksum "go.sum" }}-{{ checksum "Makefile" }}
|
|
||||||
paths:
|
|
||||||
- "/go/pkg/mod"
|
|
||||||
- ".tmp"
|
|
||||||
|
|
||||||
- setup_remote_docker:
|
|
||||||
version: 18.06.0-ce
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: enable docker client
|
|
||||||
command: |
|
|
||||||
# all of this to enable "circleci local execute ..." cli commands for /var/run/docker.sock
|
|
||||||
mkdir -p ${HOME}/.local/bin
|
|
||||||
cat \<< EOF > ${HOME}/.local/bin/docker
|
|
||||||
#!/bin/bash
|
|
||||||
set -xue
|
|
||||||
sudo -E ${HOME}/.local/bin/docker.bin \$@
|
|
||||||
EOF
|
|
||||||
sudo mv /usr/bin/docker ${HOME}/.local/bin/docker.bin
|
|
||||||
chmod 755 ${HOME}/.local/bin/docker
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: build cache key for java test-fixture blobs
|
|
||||||
command: make java-packages-fingerprint
|
|
||||||
|
|
||||||
- restore_cache:
|
|
||||||
keys:
|
|
||||||
- syft-unit-test-java-cache-{{ checksum "syft/cataloger/java/test-fixtures/java-builds/packages.fingerprint" }}
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: run unit tests
|
|
||||||
command: make unit
|
|
||||||
|
|
||||||
- save_cache:
|
|
||||||
key: syft-unit-test-java-cache-{{ checksum "syft/cataloger/java/test-fixtures/java-builds/packages.fingerprint" }}
|
|
||||||
paths:
|
|
||||||
- "syft/cataloger/java/test-fixtures/java-builds/packages"
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: validate syft output against the CycloneDX schema
|
|
||||||
command: make validate-cyclonedx-schema
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: build hash key for integration test-fixtures blobs
|
|
||||||
command: make integration-fingerprint
|
|
||||||
|
|
||||||
- restore_cache:
|
|
||||||
keys:
|
|
||||||
- syft-integration-test-cache-{{ checksum "test/integration/test-fixtures/cache.fingerprint" }}
|
|
||||||
- run:
|
|
||||||
name: run integration tests
|
|
||||||
command: make integration
|
|
||||||
|
|
||||||
- save_cache:
|
|
||||||
key: syft-integration-test-cache-{{ checksum "test/integration/test-fixtures/cache.fingerprint" }}
|
|
||||||
paths:
|
|
||||||
- "test/integration/test-fixtures/cache"
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
# Note: changing this workflow name requires making the same update in the .github/workflows/release.yaml pipeline
|
|
||||||
"Static Analysis + Unit + Integration":
|
|
||||||
jobs:
|
|
||||||
- run-static-analysis:
|
|
||||||
name: "Static Analysis"
|
|
||||||
version: "1.14"
|
|
||||||
- run-tests:
|
|
||||||
name: "Unit & Integration Tests (go-1.13)"
|
|
||||||
version: "1.13"
|
|
||||||
- run-tests:
|
|
||||||
name: "Unit & Integration Tests (go-latest)"
|
|
||||||
version: "latest"
|
|
103
.github/workflows/static-unit-integration.yaml
vendored
Normal file
103
.github/workflows/static-unit-integration.yaml
vendored
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
name: 'Static Analysis + Unit + Integration'
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
Static-Analysis:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go-version: [1.x]
|
||||||
|
platform: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go-version }}
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Restore bootstrap cache
|
||||||
|
id: bootstrap-cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/go/pkg/mod
|
||||||
|
${{ github.workspace }}/.tmp
|
||||||
|
key: ${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}-${{ hashFiles('Makefile') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}-
|
||||||
|
${{ runner.os }}-go-${{ matrix.go-version }}-
|
||||||
|
|
||||||
|
- name: Bootstrap project dependencies
|
||||||
|
if: steps.bootstrap-cache.outputs.cache-hit != 'true'
|
||||||
|
run: make bootstrap
|
||||||
|
|
||||||
|
- name: Bootstrap CI dependencies
|
||||||
|
run: make ci-bootstrap
|
||||||
|
|
||||||
|
- name: Run static analysis
|
||||||
|
run: make static-analysis
|
||||||
|
|
||||||
|
Tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
# test the lower bounds of support, and the latest available
|
||||||
|
go-version: [1.13.x, 1.x]
|
||||||
|
platform: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go-version }}
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Restore bootstrap cache
|
||||||
|
id: bootstrap-cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/go/pkg/mod
|
||||||
|
${{ github.workspace }}/.tmp
|
||||||
|
key: ${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}-${{ hashFiles('Makefile') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-go-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}-
|
||||||
|
${{ runner.os }}-go-${{ matrix.go-version }}-
|
||||||
|
|
||||||
|
- name: Bootstrap project dependencies
|
||||||
|
if: steps.bootstrap-cache.outputs.cache-hit != 'true'
|
||||||
|
run: make bootstrap
|
||||||
|
|
||||||
|
- name: Bootstrap CI dependencies
|
||||||
|
run: make ci-bootstrap
|
||||||
|
|
||||||
|
- name: Build cache key for java test-fixture blobs (for unit tests)
|
||||||
|
run: make java-packages-fingerprint
|
||||||
|
|
||||||
|
- name: Restore Java test-fixture cache
|
||||||
|
id: unit-java-cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: syft/cataloger/java/test-fixtures/java-builds/packages
|
||||||
|
key: ${{ runner.os }}-unit-java-cache-${{ hashFiles( 'syft/cataloger/java/test-fixtures/java-builds/packages.fingerprint' ) }}
|
||||||
|
|
||||||
|
- name: Run unit tests
|
||||||
|
run: make unit
|
||||||
|
|
||||||
|
- name: Validate syft output against the CycloneDX schema
|
||||||
|
run: make validate-cyclonedx-schema
|
||||||
|
|
||||||
|
- name: Build key for tar cache
|
||||||
|
run: make integration-fingerprint
|
||||||
|
|
||||||
|
- name: Restore integration test cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/integration/test-fixtures/cache
|
||||||
|
key: ${{ runner.os }}-integration-test-cache-${{ hashFiles('integration/test-fixtures/cache.fingerprint') }}
|
||||||
|
|
||||||
|
- name: Run integration tests
|
||||||
|
run: make integration
|
12
Makefile
12
Makefile
|
@ -71,7 +71,7 @@ help:
|
||||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "$(BOLD)$(CYAN)%-25s$(RESET)%s\n", $$1, $$2}'
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "$(BOLD)$(CYAN)%-25s$(RESET)%s\n", $$1, $$2}'
|
||||||
|
|
||||||
.PHONY: ci-bootstrap
|
.PHONY: ci-bootstrap
|
||||||
ci-bootstrap: bootstrap
|
ci-bootstrap:
|
||||||
DEBIAN_FRONTEND=noninteractive sudo apt update && sudo -E apt install -y bc jq libxml2-utils
|
DEBIAN_FRONTEND=noninteractive sudo apt update && sudo -E apt install -y bc jq libxml2-utils
|
||||||
|
|
||||||
.PHONY: bootstrap
|
.PHONY: bootstrap
|
||||||
|
@ -163,16 +163,6 @@ generate-json-schema: clean-json-schema-examples integration ## Generate a new j
|
||||||
clear-test-cache: ## Delete all test cache (built docker image tars)
|
clear-test-cache: ## Delete all test cache (built docker image tars)
|
||||||
find . -type f -wholename "**/test-fixtures/cache/*.tar" -delete
|
find . -type f -wholename "**/test-fixtures/cache/*.tar" -delete
|
||||||
|
|
||||||
.PHONY: check-pipeline
|
|
||||||
check-pipeline: ## Run local CircleCI pipeline locally (sanity check)
|
|
||||||
$(call title,Check pipeline)
|
|
||||||
# note: this is meant for local development & testing of the pipeline, NOT to be run in CI
|
|
||||||
mkdir -p $(TEMPDIR)
|
|
||||||
circleci config process .circleci/config.yml > .tmp/circleci.yml
|
|
||||||
circleci local execute -c .tmp/circleci.yml --job "Static Analysis"
|
|
||||||
circleci local execute -c .tmp/circleci.yml --job "Unit & Integration Tests (go-latest)"
|
|
||||||
@printf '$(SUCCESS)Pipeline checks pass!$(RESET)\n'
|
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build: $(SNAPSHOTDIR) ## Build release snapshot binaries and packages
|
build: $(SNAPSHOTDIR) ## Build release snapshot binaries and packages
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue