Files
gocryptotrader/.github/workflows/tests.yml
Gareth Kirwan fafee93e1b sonic, exchanges/okx: Make sonic opt-in by default and fix various OKX issues (#1816)
* Sonic: Add sonic_on build tag

Thinking about other ways to do this, but they amount to the same thing.
It's messy, but I don't have another idea.

* Okx: Remove redundant useAsIs on slices

Slices are automatically used-as-is, so passing true for these types was
unnecessary.
Removing the field simplifies rationalising inverting the flag

* Okx: Unify timestamp response types

* Okx: Change ResetRFQMMPStatus to return a types.Time

* Okx: Move withdrawData type to types

* Okx: Fix AccountConfiguration slice return

* Okx: Improve SendHTTPRequest documentation

* Okx: Extend tests for UseAsIs non-defaults

* Okx: Fix GetPublicUnderlying with sonic 1.12.9

Using **result for slices with useAsItIs causes sonic to fail.
This might be addressed upstream, but it's also not clear what the
unmarshal behaviour for an untyped reference to a typed reference should
be in the RFC, so we could get a golang.org/encoding/json regression on
this too.

There's no harm in fixing this, for consistency, to match our handling
for non-slice []any wrapping to just use the pointer as is.

Note: As of today this requires sonic:main for this to work, because of
the other bug:
```
M go.mod
-	github.com/bytedance/sonic v1.12.9
+	github.com/bytedance/sonic v1.12.10-0.20250224121557-e30ac4f2e4fe
```

* Okx: Remove redundant slice check

This code didn't work, and if I make it look at rv.Elem().Kind() it
errors.
Haven't dug too deeply but right now I think we just remove it.

* Okx: Simplify SendHTTPRequest by removing UseAsIs

Looks to be entirely derivable

* Okx: Remove http check that resps must contain data

GetAnnouncementTyeps failing in US because of empty response.
But also any situation where there really is no data.
e.g. GetCandlesticks might return no candlesticks for a period and instrument, because there aren't any.
That shouldn't be an error.
More saliently if you request orders, or something similar.

So, since that check wasn't working before, and it's causing issues now, I'm going to remove it.

* Okx: Fix TestGetAnnouncementTypes failing in US

announcement-types returns empty in the US, where our github actions
run.
That's kinda okay. Just don't test we get any back

* Sonic: Default to sonic off

We've seen too many fatal panics and races with sonic, both in GCT runs
and being reported in sonic, to default to it being turned on right now.
Whilst we have faith sonic will get through these with time, for now the
sensible thing to do for our users is make sonic opt-in.

This also removes any of the conditions around 386, etc.
If someone wants to run with sonic, they can. Most notably if they're
trying out an experimental sonic branch that supports 386, etc.
2025-03-20 12:31:11 +11:00

184 lines
5.3 KiB
YAML

on: [push, pull_request]
name: CI
env:
GO_VERSION: 1.24.x
jobs:
backend:
name: GoCryptoTrader backend (${{ matrix.os }}, ${{ matrix.goarch }}, psql=${{ matrix.psql }}, skip_wrapper_tests=${{ matrix.skip_wrapper_tests}}, sonic=${{ matrix.sonic }})
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
goarch: amd64
psql: true
skip_wrapper_tests: false
sonic: false
- os: ubuntu-latest
goarch: 386
psql: true
skip_wrapper_tests: true
sonic: false
- os: ubuntu-24.04-arm
goarch: arm64
psql: false # Not supported
skip_wrapper_tests: true
sonic: false
- os: macos-latest
goarch: arm64
psql: true
skip_wrapper_tests: true
sonic: false
- os: windows-latest
goarch: amd64
psql: true
skip_wrapper_tests: true
sonic: false
- os: ubuntu-latest
goarch: amd64
psql: true
skip_wrapper_tests: false
sonic: true # Only test sonic on linux/amd64 since too many races and fatals across other archs and OS
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@v7
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: Set GOFLAGS
run: |
if [ "${{ matrix.sonic }}" = "true" ]; then
echo "GOFLAGS=${GOFLAGS} -tags=sonic_on" >> $GITHUB_ENV
fi
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@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
backend-docker:
name: GoCryptoTrader backend docker (ubuntu-latest, amd64, psql=false, skip_wrapper_tests=true, sonic=false)
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 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/amd64.Dockerfile') }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-docker-buildx-${{ hashFiles('./.github/workflows/amd64.Dockerfile') }}-
${{ runner.os }}-docker-buildx-
- name: Build Docker image
run: |
docker buildx build \
--load \
--cache-to=type=local,dest=/tmp/.docker-buildx-cache,mode=max \
--cache-from=type=local,src=/tmp/.docker-buildx-cache \
--tag gct-backend-amd64 \
-f ./.github/workflows/amd64.Dockerfile \
.
- name: Run Docker image
run: |
docker run --env SKIP_WRAPPER_CI_TESTS=true --env CI=true --env GCT_DOCKER_CI=true --rm gct-backend-amd64
frontend:
name: GoCryptoTrader frontend
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