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: lint-job: name: Checking Lint runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make verifiers vulnerable-dependencies-checks: name: "Check for vulnerable dependencies" runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19 ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true check-latest: true - name: Get govulncheck run: go install golang.org/x/vuln/cmd/govulncheck@latest shell: bash - name: Run govulncheck run: govulncheck ./... shell: bash semgrep-static-code-analysis: name: "semgrep checks" runs-on: ubuntu-latest strategy: matrix: os: [ ubuntu-latest ] steps: - name: Check out source code uses: actions/checkout@v3 - name: Scanning code on ${{ matrix.os }} continue-on-error: false run: | # Install semgrep rather than using a container due to: # https://github.com/actions/checkout/issues/334 sudo apt install -y python3-pip || apt install -y python3-pip pip3 install semgrep semgrep --config semgrep.yaml $(pwd)/portal-ui --error ui-assets: name: "React Code Has No Warnings & Prettified" runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Read .nvmrc id: node_version run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} cache: 'yarn' cache-dependency-path: portal-ui/yarn.lock - uses: actions/cache@v3 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} - name: Install Dependencies working-directory: ./portal-ui continue-on-error: false run: | yarn install --frozen-lockfile --immutable - name: Check for Warnings in build output working-directory: ./portal-ui continue-on-error: false run: | ./check-warnings.sh - name: Check if Files are Prettified working-directory: ./portal-ui continue-on-error: false run: | ./check-prettier.sh reuse-golang-dependencies: name: reuse golang dependencies runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | go mod download latest-minio: name: Build latest MinIO runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] steps: # To build minio image, we need to clone the repository first - name: Clone github.com/minio/minio uses: actions/checkout@v3 with: repository: minio/minio - uses: actions/cache@v3 id: minio-latest-cache name: MinIO Latest Cache with: path: | ./minio key: ${{ runner.os }}-minio-latest-${{ hashFiles('./go.sum') }} - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go-minio - name: Build on ${{ matrix.os }} if: steps.minio-latest-cache.outputs.cache-hit != 'true' run: | echo "Create minio binary"; make build; compile-binary: name: Compiles on Go ${{ matrix.go-version }} and ${{ matrix.os }} needs: - lint-job - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - uses: actions/cache@v3 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make console react-code-known-vulnerabilities: name: "React Code Has No Known Vulnerable Deps" needs: - ui-assets runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Read .nvmrc id: node_version run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} cache: 'yarn' cache-dependency-path: portal-ui/yarn.lock - name: Checks for known security issues with the installed packages working-directory: ./portal-ui continue-on-error: false run: | yarn audit all-permissions-1: name: Permissions Tests Part 1 needs: - compile-binary runs-on: [ ubuntu-latest ] timeout-minutes: 10 strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" 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: - compile-binary runs-on: [ ubuntu-latest ] timeout-minutes: 10 strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" 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: - compile-binary runs-on: [ ubuntu-latest ] timeout-minutes: 10 strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" 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: - compile-binary runs-on: [ ubuntu-latest ] timeout-minutes: 15 strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - name: Start Console, front-end app and initialize users/policies run: | (./console server) & (make initialize-permissions) - name: Run TestCafe Tests timeout-minutes: 10 uses: DevExpress/testcafe-action@latest with: args: '"chrome --headless --no-sandbox" portal-ui/tests/permissions-4/ --skip-js-errors' all-permissions-5: name: Permissions Tests Part 5 needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-5/ --skip-js-errors' all-permissions-6: name: Permissions Tests Part 6 needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-6/ --skip-js-errors' all-permissions-7: name: Permissions Tests Part 7 needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-7/ --skip-js-errors' all-permissions-8: name: Permissions Tests Part 8 needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-8/ --skip-js-errors' all-permissions-9: name: Permissions Tests Part 9 needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-9/ --skip-js-errors -c 3' - name: Clean up users & policies run: | make cleanup-permissions all-permissions-A: name: Permissions Tests Part A needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-A/ --skip-js-errors -c 3' - name: Clean up users & policies run: | make cleanup-permissions all-permissions-B: name: Permissions Tests Part B needs: - compile-binary runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} - name: clean-previous-containers-if-any run: | docker stop minio || true; docker container prune -f || true; - 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 --no-sandbox" portal-ui/tests/permissions-B/ --skip-js-errors -c 3' - name: Clean up users & policies run: | make cleanup-permissions all-operator-tests-1: name: Operator UI Tests Part 1 needs: - compile-binary runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio # To build operator image, we need to clone the repository first - name: clone https://github.com/minio/operator uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/operator # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'operator_repository' - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} # 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/login --skip-js-errors -c 3' all-operator-tests-2: name: Operator UI Tests Part 2 needs: - compile-binary runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio # To build operator image, we need to clone the repository first - name: clone https://github.com/minio/operator uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/operator # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'operator_repository' - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} # 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/tenant/test-1 --skip-js-errors -c 3' all-operator-tests-3: name: Operator UI Tests Part 3 needs: - compile-binary runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NVMRC }} - name: Install MinIO JS working-directory: ./ continue-on-error: false run: | yarn add minio # To build operator image, we need to clone the repository first - name: clone https://github.com/minio/operator uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/operator # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'operator_repository' - uses: actions/cache@v3 name: Console Binary Cache with: path: | ./console key: ${{ runner.os }}-binary-${{ github.run_id }} # 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/tenant/test-2 --skip-js-errors -c 3' cross-compile-1: name: Cross compile needs: - lint-job - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make test-pkg - uses: actions/cache@v3 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make test - uses: actions/cache@v3 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Build on ${{ matrix.os }} env: GO111MODULE: on GOOS: linux run: | make test-unit-test-operator - uses: actions/cache@v3 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis - latest-minio runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19.x ] steps: - name: Check out code uses: actions/checkout@v3 - name: Clone github.com/minio/minio uses: actions/checkout@master with: repository: minio/minio path: 'minio_repository' - uses: actions/cache@v3 id: minio-latest-cache name: MinIO Latest Cache with: path: | ./minio key: ${{ runner.os }}-minio-latest-${{ hashFiles('./minio_repository/go.sum') }} - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - 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"; cp ../minio . docker build -q --no-cache -t minio/minio:$VERSION . -f Dockerfile 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; echo "Create bucket for replication with versioning" 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" make test-integration MINIO_VERSION=$VERSION; - uses: actions/cache@v3 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install modules working-directory: ./portal-ui run: yarn - name: Run tests working-directory: ./portal-ui run: yarn test replication: name: Site Replication Test needs: - lint-job - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis - latest-minio runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.19.x ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Clone github.com/minio/minio uses: actions/checkout@master with: repository: minio/minio path: 'minio_repository' - uses: actions/cache@v3 id: minio-latest-cache name: MinIO Latest Cache with: path: | ./minio key: ${{ runner.os }}-minio-latest-${{ hashFiles('./minio_repository/go.sum') }} - 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"; cp ../minio . docker build -q --no-cache -t minio/minio:$VERSION . -f Dockerfile 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@v3 id: coverage-cache-replication name: Coverage Cache Replication with: path: | ./replication/coverage/ key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }} # To save our replication.out file into an artifact. # By default, GitHub stores build logs and artifacts for 90 days. - uses: actions/upload-artifact@v3 with: name: replication-artifact path: ./replication/coverage/replication.out sso-integration: name: SSO Integration Test needs: - lint-job - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis - latest-minio runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19.x ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Clone github.com/minio/minio uses: actions/checkout@master with: repository: minio/minio path: 'minio_repository' - uses: actions/cache@v3 id: minio-latest-cache name: MinIO Latest Cache with: path: | ./minio key: ${{ runner.os }}-minio-latest-${{ hashFiles('./minio_repository/go.sum') }} - name: Build on ${{ matrix.os }} run: | echo "The idea is to build minio image from downloaded repository"; cd $GITHUB_WORKSPACE/minio_repository; echo "replace github.com/minio/console => ../" >> go.mod echo "updates to go.mod needed; to update it: go mod tidy" go mod tidy -compat=1.19 echo "Get git version to build MinIO Image"; VERSION=`git rev-parse HEAD`; echo $VERSION; echo "Create MinIO image"; cp ../minio . docker build -q --no-cache -t minio/minio:$VERSION . -f Dockerfile 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@v3 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 - ui-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.19.x ] steps: - uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go # To build operator image, we need to clone the repository first - name: clone https://github.com/minio/operator uses: actions/checkout@master with: # Repository name with owner. For example, actions/checkout # Default: ${{ github.repository }} repository: minio/operator # Relative path under $GITHUB_WORKSPACE to place the repository # To have two repositories under the same test path: 'operator_repository' - 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}/tests/deploy-tenant.sh" echo "start ---> make test-operator-integration"; make test-operator-integration; - uses: actions/cache@v3 id: coverage-cache-operator name: Coverage Cache Operator with: path: | ./operator-integration/coverage/ key: ${{ runner.os }}-coverage-2-operator-${{ github.run_id }} 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.19.x ] os: [ ubuntu-latest ] steps: - name: Check out code uses: actions/checkout@v3 - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} cache: true id: go - name: Check out gocovmerge as a nested repository uses: actions/checkout@v3 with: repository: wadey/gocovmerge path: gocovmerge - uses: actions/cache@v3 id: coverage-cache name: Coverage Cache with: path: | ./integration/coverage/ key: ${{ runner.os }}-coverage-2-${{ github.run_id }} - uses: actions/cache@v3 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@v3 id: coverage-cache-replication name: Coverage Cache Replication with: path: | ./replication/coverage/ key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }} - uses: actions/cache@v3 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@v3 id: coverage-cache-restapi name: Coverage Cache RestAPI with: path: | ./restapi/coverage/ key: ${{ runner.os }}-coverage-restapi-2-${{ github.run_id }} - uses: actions/cache@v3 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@v3 id: coverage-cache-pkg name: Coverage Cache Pkg with: path: | ./pkg/coverage/ key: ${{ runner.os }}-coverage-pkg-2-${{ github.run_id }} # Get the replication.out file from the artifact since this is working for self host runner. - uses: actions/download-artifact@v3 with: name: replication-artifact path: replication/coverage - 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.19 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 "Only run our test if play is up and running since we require it for replication tests here." PLAY_IS_ON=`wget --spider --server-response https://play.min.io:9443/login 2>&1 | grep '200\ OK' | wc -l` if [ $PLAY_IS_ON == 1 ] then echo "Play is up and running, we will proceed with the play part for coverage" 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 can fail due to lack of space: mc: Failed to copy `all.out`. # Storage backend has reached its minimum free disk threshold. Please delete a few objects to proceed. ./mc cp all.out play/builds/${{ github.repository }}/${{ github.event.number }}/${{ github.run_id }}/ || true ./mc cp all.out play/builds/${{ github.repository }}/${{ github.event.number }}/latest/ || true go tool cover -html=all.out -o coverage.html ./mc cp coverage.html play/builds/${{ github.repository }}/${{ github.event.number }}/${{ github.run_id }}/ || true ./mc cp coverage.html play/builds/${{ github.repository }}/${{ github.event.number }}/latest/ || true else echo "Play is down, please report it on hack channel, no coverage is going to be uploaded!!!" fi 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=65.4 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