mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
CI: Add macOS, Windows x64 and Linux arm64 test support (#1422)
* CI: Add macOS, Windows and Linux arm64 support * Modify arm64 job name to be inline with the others * linter: Prevent cache from causing "Cannot open: File exists" issues * Use setup-go and setup-node's inbuilt caching
This commit is contained in:
188
.github/workflows/tests.yml
vendored
188
.github/workflows/tests.yml
vendored
@@ -4,21 +4,33 @@ env:
|
||||
GO_VERSION: 1.21.x
|
||||
jobs:
|
||||
backend-psql:
|
||||
name: GoCryptoTrader back-end with PSQL
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
postgres:
|
||||
image: postgres
|
||||
env:
|
||||
POSTGRES_DB: gct_dev_ci
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 5432:5432
|
||||
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: false
|
||||
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
|
||||
@@ -26,6 +38,25 @@ jobs:
|
||||
with:
|
||||
access_token: ${{ github.token }}
|
||||
|
||||
- name: Setup Postgres
|
||||
if: matrix.psql == true
|
||||
uses: ikalnytskyi/action-setup-postgres@v4
|
||||
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
|
||||
|
||||
@@ -34,45 +65,38 @@ jobs:
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Cache go modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/go/pkg/mod
|
||||
~/.cache/go-build
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: ${{ runner.os }}-go-
|
||||
- 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: |
|
||||
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
||||
sudo apt-get update
|
||||
sudo apt-get install gcc-multilib g++-multilib
|
||||
shell: bash
|
||||
|
||||
- name: Test
|
||||
run: go test -race -coverprofile coverage.txt -covermode atomic ./...
|
||||
run: |
|
||||
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:
|
||||
PSQL_USER: postgres
|
||||
PSQL_PASS: postgres
|
||||
PSQL_HOST: localhost
|
||||
PSQL_DBNAME: gct_dev_ci
|
||||
PSQL_SKIPSQLCMD: true
|
||||
PSQL_TESTDBNAME: gct_dev_ci
|
||||
PSQL_SSLMODE: disable
|
||||
GOARCH: ${{ matrix.goarch }}
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
|
||||
backend-32bit:
|
||||
name: GoCryptoTrader back-end 32-bit with PSQL
|
||||
backend-arm64:
|
||||
name: GoCryptoTrader back-end (ubuntu-latest, arm64, false, true)
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
postgres:
|
||||
image: postgres
|
||||
env:
|
||||
POSTGRES_DB: gct_dev_ci
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 5432:5432
|
||||
|
||||
steps:
|
||||
- name: Cancel previous workflow runs
|
||||
@@ -82,43 +106,38 @@ jobs:
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
platforms: linux/arm64
|
||||
|
||||
- name: Cache go modules
|
||||
- name: Set up Docker buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Cache Docker layers
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/go/pkg/mod
|
||||
~/.cache/go-build
|
||||
key: ${{ runner.os }}-go-386-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: ${{ runner.os }}-go-386-
|
||||
|
||||
- name: Update apt-get
|
||||
run: sudo apt-get update
|
||||
|
||||
- name: Install gcc-multilib
|
||||
run: sudo apt-get install gcc-multilib
|
||||
|
||||
- name: Test
|
||||
run: go test -coverprofile coverage.txt -covermode atomic ./...
|
||||
env:
|
||||
PSQL_USER: postgres
|
||||
PSQL_PASS: postgres
|
||||
PSQL_HOST: localhost
|
||||
PSQL_DBNAME: gct_dev_ci
|
||||
PSQL_SKIPSQLCMD: true
|
||||
PSQL_TESTDBNAME: gct_dev_ci
|
||||
PSQL_SSLMODE: disable
|
||||
GOARCH: 386
|
||||
CGO_ENABLED: 1
|
||||
CGO_CFLAGS: -fno-stack-protector
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
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 --rm gct-backend-arm64
|
||||
|
||||
frontend:
|
||||
name: GoCryptoTrader front-end
|
||||
@@ -135,15 +154,8 @@ jobs:
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '10.8.x'
|
||||
|
||||
- name: Cache Node.js modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.OS }}-node-
|
||||
${{ runner.OS }}-
|
||||
cache: 'npm'
|
||||
cache-dependency-path: web/package-lock.json
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
|
||||
Reference in New Issue
Block a user