on: [push, pull_request] name: CI env: GO_VERSION: 1.23.x jobs: backend-psql: name: GoCryptoTrader back-end strategy: fail-fast: false matrix: include: - os: ubuntu-latest goarch: amd64 psql: true skip_wrapper_tests: false - os: ubuntu-latest goarch: 386 psql: true skip_wrapper_tests: true - os: macos-latest goarch: amd64 psql: true skip_wrapper_tests: true - os: macos-13 # beta goarch: amd64 psql: true skip_wrapper_tests: true - os: windows-latest goarch: amd64 psql: true skip_wrapper_tests: true runs-on: ${{ matrix.os }} steps: - name: Cancel previous workflow runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} - name: Setup Postgres if: matrix.psql == true uses: ikalnytskyi/action-setup-postgres@v6 with: database: gct_dev_ci id: postgres - name: Set up Postgres environment if: matrix.psql == true run: | echo "PSQL_USER=postgres" >> $GITHUB_ENV echo "PSQL_PASS=postgres" >> $GITHUB_ENV echo "PSQL_HOST=localhost" >> $GITHUB_ENV echo "PSQL_DBNAME=gct_dev_ci" >> $GITHUB_ENV echo "PSQL_TESTDBNAME=gct_dev_ci" >> $GITHUB_ENV echo "PSQL_SSLMODE=disable" >> $GITHUB_ENV echo "PSQL_SKIPSQLCMD=true" >> $GITHUB_ENV shell: bash - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} - name: Skip additional wrapper CI tests if: matrix.skip_wrapper_tests == true run: | echo "SKIP_WRAPPER_CI_TESTS=true" >> $GITHUB_ENV shell: bash - name: Additional steps for 386 architecture if: matrix.goarch == '386' run: | sudo apt-get update sudo apt-get install -y gcc-multilib shell: bash - name: Set CGO_ENABLED for 386 and macos-latest if: matrix.goarch == '386' || matrix.os == 'macos-latest' run: | echo "CGO_ENABLED=1" >> $GITHUB_ENV shell: bash - name: Test run: | # PGSERVICEFILE isn't supported by lib/pq and will cause a panic if set unset PGSERVICEFILE if [ "${{ matrix.goarch }}" = "386" ]; then go test -coverprofile coverage.txt -covermode atomic ./... else go test -race -coverprofile coverage.txt -covermode atomic ./... fi shell: bash env: GOARCH: ${{ matrix.goarch }} - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} backend-arm64: name: GoCryptoTrader back-end (ubuntu-latest, arm64, false, true) runs-on: ubuntu-latest steps: - name: Cancel previous workflow runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} - name: Checkout code uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: linux/arm64 - name: Set up Docker buildx uses: docker/setup-buildx-action@v3 - name: Cache Docker layers uses: actions/cache@v4 with: path: /tmp/.docker-buildx-cache key: ${{ runner.os }}-docker-buildx-${{ hashFiles('./.github/workflows/arm64.Dockerfile') }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-docker-buildx-${{ hashFiles('./.github/workflows/arm64.Dockerfile') }}- ${{ runner.os }}-docker-buildx- - name: Build Docker image run: | docker buildx build \ --load \ --platform linux/arm64 \ --cache-to=type=local,dest=/tmp/.docker-buildx-cache,mode=max \ --cache-from=type=local,src=/tmp/.docker-buildx-cache \ --tag gct-backend-arm64 \ -f ./.github/workflows/arm64.Dockerfile \ . - name: Run Docker image run: | docker run --platform linux/arm64 --env SKIP_WRAPPER_CI_TESTS=true --env CI=true --env GCT_DOCKER_CI=true --rm gct-backend-arm64 frontend: name: GoCryptoTrader front-end runs-on: ubuntu-latest steps: - name: Cancel previous workflow runs uses: styfle/cancel-workflow-action@0.12.1 with: access_token: ${{ github.token }} - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '10.8.x' cache: 'npm' cache-dependency-path: web/package-lock.json - name: Build run: | cd web/ npm install npm run lint npm run build