mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-14 07:26:47 +00:00
* 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.
184 lines
5.3 KiB
YAML
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
|