Add entrypoint script for reading environtment variables #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # @format | |
| name: Workflow | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| # 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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Build on ${{ matrix.os }} | |
| env: | |
| GO111MODULE: on | |
| GOOS: linux | |
| run: | | |
| make verifiers | |
| 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@v5 | |
| - 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)/web-app --error | |
| ui-assets: | |
| name: "React Code Has No Warnings & Prettified" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| cache: "yarn" | |
| cache-dependency-path: web-app/yarn.lock | |
| - uses: actions/cache@v4 | |
| id: assets-cache | |
| name: Assets Cache | |
| with: | |
| path: | | |
| ./web-app/build/ | |
| key: ${{ runner.os }}-assets-${{ github.run_id }} | |
| - name: Install Dependencies | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| yarn install --immutable | |
| - name: Check for Warnings in build output | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| ./check-warnings.sh | |
| - name: Check if Files are Prettified | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| ./check-prettier.sh | |
| - name: Check for dead code | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| ./check-deadcode.sh | |
| swagger-codegen: | |
| name: "Check for uncommitted changes through Swagger Codegen Changes." | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Setup Node | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| cache: "yarn" | |
| cache-dependency-path: web-app/yarn.lock | |
| - name: Install NPM Dependencies | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| yarn install --immutable | |
| - name: Install go-swagger | |
| run: | | |
| go install github.com/go-swagger/go-swagger/cmd/swagger@latest | |
| swagger version | |
| - name: Validate swagger.yml | |
| run: swagger validate ./swagger.yml | |
| - name: Run Swagger Codegen | |
| run: make swagger-gen | |
| - name: Check for uncommitted changes | |
| id: git-status | |
| run: | | |
| if [[ -n "$(git status --porcelain)" ]]; then | |
| echo "Codegen modified files. Please run "make swagger-gen" and commit the changes first:" | |
| git status --porcelain | |
| echo "##### Git Diff: #####" | |
| git --no-pager diff | |
| exit 1 | |
| else | |
| echo "No changes detected after codegen." | |
| fi | |
| latest-minio: | |
| name: Test Build latest MinIO with Console | |
| needs: | |
| - swagger-codegen | |
| runs-on: [ubuntu-latest] | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| steps: | |
| # Clone Console Repo | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| # To build minio image, we need to clone the repository first | |
| - name: Clone github.com/minio/minio | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: minio/minio | |
| path: "minio_repository" | |
| - name: Check-out matching MinIO branch | |
| env: | |
| GH_BRANCH: ${{ github.head_ref || github.ref_name }} | |
| GH_PR_REPO: ${{ github.event.pull_request.head.repo.full_name }} | |
| run: | | |
| cd $GITHUB_WORKSPACE/minio_repository; | |
| GH_PR_ACCOUNT=`echo $GH_PR_REPO | sed "s/\\/.*//"` | |
| if [ ! -z "$GH_PR_ACCOUNT" ] && [ ! "$GH_PR_ACCOUNT" = "minio" ]; then | |
| ALTREPO="https://github.com/$GH_PR_ACCOUNT/minio.git" | |
| echo "Attempting to fetch $ALTREPO..." | |
| git remote add alt $ALTREPO | |
| (git fetch alt && git checkout "alt/$GH_BRANCH") || echo "$ALTREPO ($GH_BRANCH) not available, so keeping default repository/branch" | |
| fi | |
| cd $GITHUB_WORKSPACE; | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go-minio | |
| - name: Build on ${{ matrix.os }} | |
| if: steps.minio-latest-cache.outputs.cache-hit != 'true' | |
| run: | | |
| cd $GITHUB_WORKSPACE; | |
| echo "Create Console Frontend Webui Assets" | |
| cd $GITHUB_WORKSPACE/web-app; | |
| make yarn-dep | |
| make build-static-release | |
| echo "Create minio binary"; | |
| cd $GITHUB_WORKSPACE/minio_repository; | |
| echo "Replace Console with local repo" | |
| echo "replace github.com/minio/console => ../" >> go.mod | |
| echo "updates to go.mod needed; to update it: go mod tidy" | |
| go mod tidy | |
| make build; | |
| cd $GITHUB_WORKSPACE | |
| cp $GITHUB_WORKSPACE/minio_repository/minio . | |
| - uses: actions/cache/save@v4 | |
| # skip minio binary cache | |
| if: false | |
| id: minio-latest-cache | |
| name: MinIO Latest Cache | |
| with: | |
| path: | | |
| ./minio | |
| key: ${{ runner.os }}-minio-latest-${{ github.run_id }} | |
| - uses: actions/upload-artifact@v4 | |
| # skip minio binary upload | |
| if: false | |
| with: | |
| name: minio-console-binary | |
| path: | | |
| ./minio | |
| compile-binary: | |
| name: Compiles on Go ${{ matrix.go-version }} and ${{ matrix.os }} | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| - swagger-codegen | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - uses: actions/cache@v4 | |
| name: Console Binary Cache | |
| with: | |
| path: | | |
| ./console | |
| key: ${{ runner.os }}-binary-${{ github.run_id }} | |
| - uses: actions/cache@v4 | |
| id: assets-cache | |
| name: Assets Cache | |
| with: | |
| path: | | |
| ./web-app/build/ | |
| key: ${{ runner.os }}-assets-${{ github.run_id }} | |
| - name: Build on ${{ matrix.os }} | |
| env: | |
| GO111MODULE: on | |
| GOOS: linux | |
| run: | | |
| make console | |
| test-nginx-subpath: | |
| name: Test Subpath with Nginx | |
| needs: | |
| - compile-binary | |
| runs-on: [ubuntu-latest] | |
| timeout-minutes: 10 | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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, MinIO and Nginx | |
| run: | | |
| (CONSOLE_SUBPATH=/console/subpath ./console server ) & (make test-initialize-minio-nginx) | |
| - name: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| run: npx testcafe "firefox:headless" web-app/tests/subpath-nginx/ -q --skip-js-errors -c 3 | |
| - name: Clean up docker | |
| if: always() | |
| run: | | |
| make cleanup-minio-nginx | |
| all-permissions-1: | |
| name: Permissions Tests Part 1 | |
| needs: | |
| - compile-binary | |
| runs-on: [ubuntu-latest] | |
| timeout-minutes: 10 | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| run: npx testcafe "firefox:headless" web-app/tests/permissions-1/ -q --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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| run: npx testcafe "firefox:headless" web-app/tests/permissions-2/ -q --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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| run: npx testcafe "firefox:headless" web-app/tests/permissions-3/ -q --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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| timeout-minutes: 10 | |
| run: npx testcafe "firefox:headless" web-app/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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| timeout-minutes: 5 | |
| run: npx testcafe "firefox:headless" web-app/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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| timeout-minutes: 5 | |
| run: npx testcafe "firefox:headless" web-app/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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| timeout-minutes: 5 | |
| run: npx testcafe "firefox:headless" web-app/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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| timeout-minutes: 5 | |
| run: npx testcafe "firefox:headless" web-app/tests/permissions-8/ --skip-js-errors | |
| all-permissions-A: | |
| name: Permissions Tests Part A | |
| needs: | |
| - compile-binary | |
| runs-on: [ubuntu-latest] | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| run: npx testcafe "firefox:headless" web-app/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.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| - name: Install MinIO JS | |
| working-directory: ./ | |
| continue-on-error: false | |
| run: | | |
| yarn add minio | |
| - uses: actions/cache@v4 | |
| 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: Install TestCafe | |
| run: npm install testcafe@3.7.2 | |
| - name: Run TestCafe Tests | |
| run: npx testcafe "firefox:headless" web-app/tests/permissions-B/ --skip-js-errors -c 3 | |
| - name: Clean up users & policies | |
| run: | | |
| make cleanup-permissions | |
| test-pkg-on-go: | |
| name: Test Pkg on Go ${{ matrix.go-version }} and ${{ matrix.os }} | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Build on ${{ matrix.os }} | |
| env: | |
| GO111MODULE: on | |
| GOOS: linux | |
| run: | | |
| make test-pkg | |
| - uses: actions/cache@v4 | |
| id: coverage-cache-pkg | |
| name: Coverage Cache Pkg | |
| with: | |
| path: | | |
| ./pkg/coverage/ | |
| key: ${{ runner.os }}-coverage-pkg-2-${{ github.run_id }} | |
| test-api-on-go: | |
| name: Test API on Go ${{ matrix.go-version }} and ${{ matrix.os }} | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Build on ${{ matrix.os }} | |
| env: | |
| GO111MODULE: on | |
| GOOS: linux | |
| run: | | |
| make test | |
| - uses: actions/cache@v4 | |
| id: coverage-cache-api | |
| name: Coverage Cache API | |
| with: | |
| path: | | |
| ./api/coverage/ | |
| key: ${{ runner.os }}-coverage-api-2-${{ github.run_id }} | |
| b-integration-tests: | |
| name: Integration Tests with Latest Distributed MinIO | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| - compile-binary | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - uses: actions/cache@v4 | |
| name: Console Binary Cache | |
| with: | |
| path: | | |
| ./console | |
| key: ${{ runner.os }}-binary-${{ github.run_id }} | |
| - name: Build on ${{ matrix.os }} | |
| run: | | |
| echo "The idea is to build console image from cached binary"; | |
| cd $GITHUB_WORKSPACE; | |
| TAG="ghcr.io/georgmangold/console:dev" | |
| echo "Create Console image: $TAG"; | |
| docker build -q --no-cache -t $TAG . -f Dockerfile.release | |
| echo "We are going to use the latest minio image on test-integration"; | |
| MINIO_VERSION="quay.io/minio/minio:latest"; | |
| echo $MINIO_VERSION; | |
| make test-integration MINIO_VERSION=$MINIO_VERSION TAG=$TAG; | |
| - uses: actions/cache@v4 | |
| 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 | |
| - semgrep-static-code-analysis | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Install modules | |
| working-directory: ./web-app | |
| run: yarn install --immutable | |
| - name: Run tests | |
| working-directory: ./web-app | |
| run: yarn test --passWithNoTests | |
| replication: | |
| name: Site Replication Test | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| - compile-binary | |
| runs-on: [ubuntu-latest] | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Build on ${{ matrix.os }} | |
| run: | | |
| echo "We are going to use the latest minio image on test-integration"; | |
| MINIO_VERSION="quay.io/minio/minio:latest"; | |
| echo $MINIO_VERSION; | |
| make test-replication MINIO_VERSION=$MINIO_VERSION; | |
| - uses: actions/cache@v4 | |
| id: coverage-cache-replication | |
| name: Coverage Cache Replication | |
| with: | |
| path: | | |
| ./replication/coverage/ | |
| key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }} | |
| sso-integration: | |
| name: SSO Integration Test | |
| needs: | |
| - lint-job | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| - compile-binary | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Build on ${{ matrix.os }} | |
| run: | | |
| echo "We are going to use the latest minio image on test-integration"; | |
| MINIO_VERSION="quay.io/minio/minio:latest"; | |
| echo $MINIO_VERSION; | |
| make test-sso-integration MINIO_VERSION=$MINIO_VERSION; | |
| - uses: actions/cache@v4 | |
| id: coverage-cache-sso | |
| name: Coverage Cache SSO | |
| with: | |
| path: | | |
| ./sso-integration/coverage/ | |
| key: ${{ runner.os }}-sso-coverage-2-${{ github.run_id }} | |
| coverage: | |
| name: "Coverage Limit Check" | |
| needs: | |
| - b-integration-tests | |
| - test-api-on-go | |
| - test-pkg-on-go | |
| - sso-integration | |
| - replication | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Check out gocovmerge as a nested repository | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: wadey/gocovmerge | |
| path: gocovmerge | |
| - uses: actions/cache@v4 | |
| id: coverage-cache | |
| name: Coverage Cache | |
| with: | |
| path: | | |
| ./integration/coverage/ | |
| key: ${{ runner.os }}-coverage-2-${{ github.run_id }} | |
| - uses: actions/cache@v4 | |
| 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@v4 | |
| id: coverage-cache-replication | |
| name: Coverage Cache Replication | |
| with: | |
| path: | | |
| ./replication/coverage/ | |
| key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }} | |
| - uses: actions/cache@v4 | |
| id: coverage-cache-api | |
| name: Coverage Cache API | |
| with: | |
| path: | | |
| ./api/coverage/ | |
| key: ${{ runner.os }}-coverage-api-2-${{ github.run_id }} | |
| - uses: actions/cache@v4 | |
| id: coverage-cache-pkg | |
| name: Coverage Cache Pkg | |
| with: | |
| path: | | |
| ./pkg/coverage/ | |
| key: ${{ runner.os }}-coverage-pkg-2-${{ github.run_id }} | |
| - name: Get coverage | |
| run: | | |
| echo "change directory to gocovmerge" | |
| cd gocovmerge | |
| echo "download golang x tools" | |
| go mod download golang.org/x/tools | |
| echo "go mod tidy compat mode" | |
| go mod tidy -compat=1.24 | |
| 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 ../api/coverage/coverage.out ../pkg/coverage/coverage-pkg.out > all.out | |
| go tool cover -html=all.out -o $GITHUB_WORKSPACE/all-coverage.html | |
| go tool cover -html=../integration/coverage/system.out -o $GITHUB_WORKSPACE/system.html | |
| go tool cover -html=../sso-integration/coverage/sso-system.out -o $GITHUB_WORKSPACE/sso-system.html | |
| go tool cover -html=../api/coverage/coverage.out -o $GITHUB_WORKSPACE/coverage.html | |
| go tool cover -html=../pkg/coverage/coverage-pkg.out -o $GITHUB_WORKSPACE/coverage-pkg.html | |
| 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=1.0 | |
| 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 | |
| # To save our all.out and all-coverage.html file into an artifact. | |
| # By default, GitHub stores build logs and artifacts for 90 days. | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: coverage-artifact | |
| path: | | |
| ./all.out | |
| ./all-coverage.html | |
| if-no-files-found: error | |
| ui-assets-istanbul-coverage: | |
| name: "Assets with Istanbul Plugin for coverage" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Read .nvmrc | |
| id: node_version | |
| run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ env.NVMRC }} | |
| cache: "yarn" | |
| cache-dependency-path: web-app/yarn.lock | |
| - uses: actions/cache@v4 | |
| id: assets-cache-istanbul-coverage | |
| name: Assets Cache Istanbul Coverage | |
| with: | |
| path: | | |
| ./web-app/build/ | |
| key: ${{ runner.os }}-assets-istanbul-coverage-${{ github.run_id }} | |
| - name: Install Dependencies | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| yarn install --immutable | |
| - name: Check for Warnings in build output | |
| working-directory: ./web-app | |
| continue-on-error: false | |
| run: | | |
| ./check-warnings-istanbul-coverage.sh | |
| compile-binary-istanbul-coverage: | |
| name: "Compile Console Binary with Istanbul Plugin for Coverage" | |
| needs: | |
| - lint-job | |
| - ui-assets-istanbul-coverage | |
| - semgrep-static-code-analysis | |
| - compile-binary | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - uses: actions/cache@v4 | |
| name: Console Binary Cache Istanbul Coverage | |
| with: | |
| path: | | |
| ./console | |
| key: ${{ runner.os }}-binary-istanbul-coverage-${{ github.run_id }} | |
| - uses: actions/cache@v4 | |
| id: assets-cache-istanbul-coverage | |
| name: Assets Cache Istanbul Coverage | |
| with: | |
| path: | | |
| ./web-app/build/ | |
| key: ${{ runner.os }}-assets-istanbul-coverage-${{ 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 | |
| - ui-assets | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| 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 | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| 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 | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| 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 | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| 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 | |
| - semgrep-static-code-analysis | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| os: [ubuntu-latest] | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v5 | |
| - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| id: go | |
| - name: Build on ${{ matrix.os }} | |
| env: | |
| GO111MODULE: on | |
| GOOS: linux | |
| run: | | |
| make crosscompile arg1="'linux/386 netbsd/amd64'" | |
| playwright: | |
| needs: | |
| - compile-binary-istanbul-coverage | |
| timeout-minutes: 60 | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: 18 | |
| - name: Install dependencies | |
| run: | | |
| echo "Install dependencies" | |
| cd $GITHUB_WORKSPACE/web-app | |
| yarn init -y | |
| yarn add -D playwright babel-plugin-istanbul nyc react-app-rewired create-react-app @playwright/test | |
| echo "yarn install" | |
| yarn install --no-immutable | |
| - name: Install Playwright Browsers | |
| run: npx playwright install --with-deps | |
| - uses: actions/cache@v4 | |
| name: Console Binary Cache Istanbul Coverage | |
| with: | |
| path: | | |
| ./console | |
| key: ${{ runner.os }}-binary-istanbul-coverage-${{ github.run_id }} | |
| - name: Start Console, front-end app and initialize users/policies | |
| run: | | |
| (./console server) & (make initialize-permissions) | |
| - name: Run Playwright tests | |
| run: | | |
| echo "Run tests under playwright folder only" | |
| cd $GITHUB_WORKSPACE/web-app | |
| yarn remove playwright | |
| yarn add --dev @playwright/test | |
| echo "npx playwright test" | |
| npx playwright test # To run the tests | |
| echo "npx nyc report" | |
| npx nyc report # To see report printed in logs as text | |
| echo "npx nyc report --reporter=html" | |
| npx playwright test --reporter github # To run the tests |