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 - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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' - 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@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 - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.18.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@v3 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 "replace github.com/minio/console => ../" >> go.mod echo "updates to go.mod needed; to update it: go mod tidy" go mod tidy -compat=1.18 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@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 - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.18.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 # 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: 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}/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 }} lint-job: name: Checking Lint runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: ubuntu-latest strategy: matrix: go-version: [ 1.19 ] steps: - name: Check out code into the Go module directory uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} 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 react-code-known-vulnerabilities: name: "React Code Has No Known Vulnerable Deps" runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-assets- - name: Checks for known security issues with the installed packages working-directory: ./portal-ui continue-on-error: false run: | yarn audit no-warnings-and-make-assets: name: "React Code Has No Warnings & is Prettified, then Make Assets" runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 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 - 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.18.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@v3 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 - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] timeout-minutes: 10 strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-1 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-1-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-1-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-1.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: Install dependencies env: GO111MODULE: on GOOS: linux run: | cd portal-ui; yarn install; - 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] timeout-minutes: 10 strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-2 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-2-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-2-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-2.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] timeout-minutes: 10 strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-3 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-3-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-3-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-3.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] timeout-minutes: 15 strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-4 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-4-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-4-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-4.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-5 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-5-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-5-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-5.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-6 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-6-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-6-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-6.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-7 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-7-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-7-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-7.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-8 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-8-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-8-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-8.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-9 name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-9-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-9-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-9.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-A name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-A-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-A-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-A.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: Install dependencies env: GO111MODULE: on GOOS: linux run: | cd portal-ui; yarn install; - 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: [ ubuntu-latest ] strategy: matrix: go-version: [ 1.18.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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v3 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@v3 id: assets-cache-permissions-test-part-B name: Assets Cache with: path: | ./portal-ui/build/ key: ${{ runner.os }}-permissions-test-part-B-assets-${{ github.run_id }} restore-keys: | ${{ runner.os }}-permissions-test-part-B-assets- - name: Generate Assets if: steps.assets-cache-permissions-test-part-B.outputs.cache-hit != 'true' run: | echo "There was no hit, hence we generate the assets" make assets - uses: actions/cache@v3 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: Install dependencies env: GO111MODULE: on GOOS: linux run: | cd portal-ui; yarn install; - 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: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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 # 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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - uses: actions/cache@v3 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@v3 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@v3 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/login --skip-js-errors -c 3' all-operator-tests-2: name: Operator UI Tests Part 2 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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 # 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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - uses: actions/cache@v3 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@v3 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@v3 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/tenant/test-1 --skip-js-errors -c 3' all-operator-tests-3: name: Operator UI Tests Part 3 needs: - lint-job - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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 # 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: Read .nvmrc id: node_version run: echo ::set-output name=NVMRC::$(cat .nvmrc) - uses: actions/setup-node@v2 with: node-version: ${{ env.NVMRC }} - uses: actions/cache@v3 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@v3 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@v3 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/tenant/test-2 --skip-js-errors -c 3' # all-operator-tests-4: # name: Operator UI Tests Part 4 # needs: # - lint-job # - no-warnings-and-make-assets # - reuse-golang-dependencies # - semgrep-static-code-analysis # runs-on: ${{ matrix.os }} # strategy: # matrix: # go-version: [ 1.18.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 # # 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: Read .nvmrc # id: node_version # run: echo ::set-output name=NVMRC::$(cat .nvmrc) # - uses: actions/setup-node@v2 # with: # node-version: ${{ env.NVMRC }} # - uses: actions/cache@v3 # 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@v3 # 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@v3 # 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/tenant/test-3 --skip-js-errors -c 3' # all-operator-tests-5: # name: Operator UI Tests Part 5 # needs: # - lint-job # - no-warnings-and-make-assets # - reuse-golang-dependencies # - semgrep-static-code-analysis # runs-on: ${{ matrix.os }} # strategy: # matrix: # go-version: [ 1.18.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 # # 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: Read .nvmrc # id: node_version # run: echo ::set-output name=NVMRC::$(cat .nvmrc) # - uses: actions/setup-node@v2 # with: # node-version: ${{ env.NVMRC }} # - uses: actions/cache@v3 # 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@v3 # 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@v3 # 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/tenant/test-4 --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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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 - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@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 - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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@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 - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ${{ matrix.os }} strategy: matrix: go-version: [ 1.18.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@v3 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@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 - no-warnings-and-make-assets - reuse-golang-dependencies - semgrep-static-code-analysis runs-on: ubuntu-latest strategy: matrix: go-version: [ 1.18.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@v3 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; 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" TARGET_BUCKET=`echo $RANDOM | md5sum | head -c 20; echo;` echo "TARGET_BUCKET: ${TARGET_BUCKET}" echo "Only run our test if play is up and running..." 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 test" else echo "Play is down, please report it on hack channel" exit fi ./mc mb --ignore-existing play/${TARGET_BUCKET}/ ./mc version enable play/${TARGET_BUCKET} # Via API we are going to test: # mc admin bucket remote add myminio/source https://minioadmin:minioadmin@play.min.io/target --service "replication" # expected output is: Remote ARN = `arn:minio:replication::f5bdb8d7-541d-415e-aaf4-592979484ba9:target`. make test-integration MINIO_VERSION=$VERSION TARGET_BUCKET=$TARGET_BUCKET; - 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 - no-warnings-and-make-assets - reuse-golang-dependencies - 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.18.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@v3 name: Go Mod Cache with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ github.run_id }} - 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.18 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=53.40 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