name: Workflow on: pull_request: branches: - master push: branches: - master # This ensures that previous jobs for the PR are canceled when the PR is # updated. concurrency: group: ${{ github.workflow }}-${{ github.head_ref }} cancel-in-progress: true jobs: replication: name: Site Replication Test needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.17.x ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 # To build minio image, we need to clone the repository first - name: clone https://github.com/minio/minio uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/minio # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'minio_repository' - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} run: | echo "The idea is to build minio image from downloaded repository"; cd $GITHUB_WORKSPACE/minio_repository; echo "Get git version to build MinIO Image"; VERSION=`git rev-parse HEAD`; echo $VERSION; echo "Create minio image"; make docker VERSION=$VERSION; echo "Jumping back to console repository to run the integration test" cd $GITHUB_WORKSPACE; echo "We are going to use the built image on test-integration"; VERSION="minio/minio:$VERSION"; echo $VERSION; make test-replication MINIO_VERSION=$VERSION; - uses: actions/cache@v2 id: coverage-cache-replication name: Coverage Cache Replication with: path: | ./replication/coverage/ key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }} sso-integration: name: SSO Integration Test needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.17.x ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 # To build minio image, we need to clone the repository first - name: clone https://github.com/minio/minio uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/minio # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'minio_repository' - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} run: | echo "The idea is to build minio image from downloaded repository"; cd $GITHUB_WORKSPACE/minio_repository; echo "Get git version to build MinIO Image"; VERSION=`git rev-parse HEAD`; echo $VERSION; echo "Create minio image"; make docker VERSION=$VERSION; echo "Jumping back to console repository to run the integration test" cd $GITHUB_WORKSPACE; echo "We are going to use the built image on test-integration"; VERSION="minio/minio:$VERSION"; echo $VERSION; make test-sso-integration MINIO_VERSION=$VERSION; - uses: actions/cache@v2 id: coverage-cache-sso name: Coverage Cache SSO with: path: | ./sso-integration/coverage/ key: ${{ runner.os }}-sso-coverage-2-${{ github.run_id }} c-operator-api-tests: name: Operator API Tests needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.17.x ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Operator API Tests run: | curl -sLO "https://dl.k8s.io/release/v1.23.1/bin/linux/amd64/kubectl" -o kubectl chmod +x kubectl mv kubectl /usr/local/bin "${GITHUB_WORKSPACE}/.github/workflows/deploy-tenant.sh" echo "start ---> make test-operator-integration"; make test-operator-integration; - uses: actions/cache@v2 id: coverage-cache-operator name: Coverage Cache Operator with: path: | ./operator-integration/coverage/ key: ${{ runner.os }}-coverage-2-operator-${{ github.run_id }} lint-job: name: Checking Lint runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make verifiers vulnerable-dependencies-checks: name: "Check for vulnerable dependencies" runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Build on ${{ matrix.os }} continue-on-error: false if: matrix.os == 'ubuntu-latest' env: CGO_ENABLED: 0 GO111MODULE: on run: | sudo apt install jq -y sudo sysctl net.ipv6.conf.all.disable_ipv6=0 sudo sysctl net.ipv6.conf.default.disable_ipv6=0 nancy_version=$(curl --retry 10 -Ls -o /dev/null -w "%{url_effective}" https://github.com/sonatype-nexus-community/nancy/releases/latest | sed "s/https:\/\/github.com\/sonatype-nexus-community\/nancy\/releases\/tag\///") curl -L -o nancy https://github.com/sonatype-nexus-community/nancy/releases/download/${nancy_version}/nancy-${nancy_version}-linux-amd64 && chmod +x nancy go list -deps -json ./... | jq -s 'unique_by(.Module.Path)|.[]|select(has("Module"))|.Module' | ./nancy sleuth semgrep-static-code-analysis: name: "semgrep checks" runs-on: ${{ matrix.os }} container: image: "returntocorp/semgrep" strategy: matrix: os: [ ubuntu-latest ] steps: - name: Check out source code uses: actions/checkout@v2 - name: Scanning code on ${{ matrix.os }} continue-on-error: false run: | semgrep --config semgrep.yaml $(pwd)/portal-ui --error no-warnings-and-make-assets: name: "React Code Has No Warnings and then Make Assets" runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '17' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - name: Install Dependencies working-directory: ./portal-ui continue-on-error: false run: | yarn install - name: Check for Warnings in build output working-directory: ./portal-ui continue-on-error: false run: | ./check-warnings.sh reuse-golang-dependencies: name: reuse golang dependencies runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | go mod download - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} all-permissions-1: name: Permissions Tests Part 1 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-1/ --skip-js-errors -c 3' - name: Clean up users & policies run: | make cleanup-permissions all-permissions-2: name: Permissions Tests Part 2 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-2/ --skip-js-errors -c 3' - name: Clean up users & policies run: | make cleanup-permissions all-permissions-3: name: Permissions Tests Part 3 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-3/ --skip-js-errors -c 3' - name: Clean up users & policies run: | make cleanup-permissions all-permissions-4: name: Permissions Tests Part 4 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} timeout-minutes: 5 strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests timeout-minutes: 5 uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-4/ --skip-js-errors' all-permissions-5: name: Permissions Tests Part 5 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests timeout-minutes: 5 uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-5/ --skip-js-errors' all-permissions-6: name: Permissions Tests Part 6 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests timeout-minutes: 5 uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-6/ --skip-js-errors' all-permissions-7: name: Permissions Tests Part 7 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ ./portal-ui/build/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests timeout-minutes: 5 uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/permissions-7/ --skip-js-errors' all-operator-tests: name: Operator UI Tests needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - uses: actions/setup-node@v2 with: node-version: '16' - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v2 id: yarn-cache name: Yarn Cache with: path: | ${{ steps.yarn-cache-dir-path.outputs.dir }} ./portal-ui/node_modules/ key: ${{ runner.os }}-yarn-${{ hashFiles('./portal-ui/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - uses: actions/cache@v2 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - name: Build Console on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console # Runs a set of commands using the runners shell - name: Start Kind for Operator UI run: | "${GITHUB_WORKSPACE}/portal-ui/tests/scripts/operator.sh" - name: Run TestCafe Tests uses: DevExpress/testcafe-action@latest with: args: '"chrome:headless" portal-ui/tests/operator/ --skip-js-errors -c 3' compile-job: name: Compiles on Go ${{ matrix.go-version }} and ${{ matrix.os }} needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console cross-compile-1: name: Cross compile needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make crosscompile arg1="'linux/ppc64le linux/mips64'" cross-compile-2: name: Cross compile 2 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make crosscompile arg1="'linux/arm64 linux/s390x'" cross-compile-3: name: Cross compile 3 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make crosscompile arg1="'darwin/amd64 freebsd/amd64'" cross-compile-4: name: Cross compile 4 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make crosscompile arg1="'windows/amd64 linux/arm'" cross-compile-5: name: Cross compile 5 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make crosscompile arg1="'linux/386 netbsd/amd64'" test-pkg-on-go: name: Test Pkg on Go ${{ matrix.go-version }} and ${{ matrix.os }} needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make test-pkg - uses: actions/cache@v2 id: coverage-cache-pkg name: Coverage Cache Pkg with: path: | ./pkg/coverage/ key: ${{ runner.os }}-coverage-pkg-2-${{ github.run_id }} test-restapi-on-go: name: Test Restapi on Go ${{ matrix.go-version }} and ${{ matrix.os }} needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make test - uses: actions/cache@v2 id: coverage-cache-restapi name: Coverage Cache RestAPI with: path: | ./restapi/coverage/ key: ${{ runner.os }}-coverage-restapi-2-${{ github.run_id }} test-operatorapi-on-go: name: Test Operatorapi on Go ${{ matrix.go-version }} and ${{ matrix.os }} needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make test-unit-test-operator - uses: actions/cache@v2 id: coverage-cache-unittest-operatorapi name: Coverage Cache unit test operatorAPI with: path: | ./operatorapi/coverage/ key: ${{ runner.os }}-coverage-unittest-operatorapi-2-${{ github.run_id }} b-integration-tests: name: Integration Tests with Latest Distributed MinIO needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.17.x ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 # To build minio image, we need to clone the repository first - name: clone https://github.com/minio/minio uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/minio # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'minio_repository' - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - name: Build on ${{ matrix.os }} run: | echo "The idea is to build minio image from downloaded repository"; cd $GITHUB_WORKSPACE/minio_repository; echo "Get git version to build MinIO Image"; VERSION=`git rev-parse HEAD`; echo $VERSION; echo "Create minio image"; make docker VERSION=$VERSION; echo "Jumping back to console repository to run the integration test" cd $GITHUB_WORKSPACE; echo "We are going to use the built image on test-integration"; VERSION="minio/minio:$VERSION"; echo $VERSION; make test-integration MINIO_VERSION=$VERSION; - uses: actions/cache@v2 id: coverage-cache name: Coverage Cache with: path: | ./integration/coverage/ key: ${{ runner.os }}-coverage-2-${{ github.run_id }} react-tests: name: React Tests needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - vulnerable-dependencies-checks - semgrep-static-code-analysis runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install modules working-directory: ./portal-ui run: yarn - name: Run tests working-directory: ./portal-ui run: yarn test coverage: name: "Coverage Limit Check" needs: - b-integration-tests - test-restapi-on-go - test-operatorapi-on-go - c-operator-api-tests - test-pkg-on-go - sso-integration - replication runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.17.x ] os: [ ubuntu-latest ] steps: - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Check out gocovmerge as a nested repository uses: actions/checkout@v2 with: repository: wadey/gocovmerge path: gocovmerge - uses: actions/cache@v2 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache name: Coverage Cache with: path: | ./integration/coverage/ key: ${{ runner.os }}-coverage-2-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache-sso name: Coverage Cache SSO with: path: | ./sso-integration/coverage/ key: ${{ runner.os }}-sso-coverage-2-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache-replication name: Coverage Cache Replication with: path: | ./replication/coverage/ key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache-operator name: Coverage Cache Operator with: path: | ./operator-integration/coverage/ key: ${{ runner.os }}-coverage-2-operator-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache-restapi name: Coverage Cache RestAPI with: path: | ./restapi/coverage/ key: ${{ runner.os }}-coverage-restapi-2-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache-unittest-operatorapi name: Coverage Cache unit test operatorAPI with: path: | ./operatorapi/coverage/ key: ${{ runner.os }}-coverage-unittest-operatorapi-2-${{ github.run_id }} - uses: actions/cache@v2 id: coverage-cache-pkg name: Coverage Cache Pkg with: path: | ./pkg/coverage/ key: ${{ runner.os }}-coverage-pkg-2-${{ github.run_id }} - name: Get coverage run: | echo "change directory to gocovmerge" cd gocovmerge echo "download golang x tools" go mod download golang.org/x/tools echo "go mod tidy compat mode" go mod tidy -compat=1.17 echo "go build gocoverage.go" go build gocovmerge.go echo "put together the outs for final coverage resolution" ./gocovmerge ../integration/coverage/system.out ../replication/coverage/replication.out ../sso-integration/coverage/sso-system.out ../restapi/coverage/coverage.out ../pkg/coverage/coverage-pkg.out ../operator-integration/coverage/operator-api.out ../operatorapi/coverage/coverage-unit-test-operatorapi.out > all.out echo "Download mc for Ubuntu" wget -q https://dl.min.io/client/mc/release/linux-amd64/mc echo "Change the permissions to execute mc command" chmod +x mc echo "Create the folder to put the all.out file" ./mc mb --ignore-existing play/builds/ echo "Copy the all.out file to play bucket" echo ${{ github.repository }} echo ${{ github.event.number }} echo ${{ github.run_id }} ./mc cp all.out play/builds/${{ github.repository }}/${{ github.event.number }}/${{ github.run_id }}/ ./mc cp all.out play/builds/${{ github.repository }}/${{ github.event.number }}/latest/ go tool cover -html=all.out -o coverage.html ./mc cp coverage.html play/builds/${{ github.repository }}/${{ github.event.number }}/${{ github.run_id }}/ ./mc cp coverage.html play/builds/${{ github.repository }}/${{ github.event.number }}/latest/ echo "grep to obtain the result" go tool cover -func=all.out | grep total > tmp2 result=`cat tmp2 | awk 'END {print $3}'` result=${result%\%} threshold=47.7 echo "Result:" echo "$result%" if (( $(echo "$result >= $threshold" |bc -l) )); then echo "It is equal or greater than threshold ($threshold%), passed!" else echo "It is smaller than threshold ($threshold%) value, failed!" exit 1 fi