Skip to content

Merge pull request #21 from rbaliyan/feat/http-gateway #74

Merge pull request #21 from rbaliyan/feat/http-gateway

Merge pull request #21 from rbaliyan/feat/http-gateway #74

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions: read-all
jobs:
test:
name: Test
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: ledger_test
POSTGRES_PASSWORD: ledger_test
POSTGRES_DB: ledger_test
ports:
- 5434:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
with:
go-version-file: go.mod
- name: Start MongoDB replica set
run: |
docker run -d --name ledger-mongo-test \
-p 27020:27017 \
mongo:7.0 --replSet rs0
echo "Waiting for MongoDB to be ready..."
for i in $(seq 1 30); do
docker exec ledger-mongo-test mongosh --quiet --eval "db.adminCommand('ping').ok" 2>/dev/null | grep -q "1" && break
sleep 1
done
echo "Initialising replica set..."
docker exec ledger-mongo-test mongosh --quiet --eval \
"rs.initiate({_id:'rs0',members:[{_id:0,host:'localhost:27017'}]})"
echo "Waiting for primary election..."
for i in $(seq 1 30); do
docker exec ledger-mongo-test mongosh --quiet --eval "rs.isMaster().ismaster" 2>/dev/null | grep -q "^true$" && break
sleep 1
done
echo "MongoDB replica set ready"
- name: Download dependencies
run: go mod download
- name: Run tests
env:
POSTGRES_DSN: postgres://ledger_test:ledger_test@localhost:5434/ledger_test?sslmode=disable
MONGO_URI: mongodb://localhost:27020/?directConnection=true
run: go test -race -coverprofile=coverage.out -covermode=atomic ./...
- name: Upload coverage to Codecov
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
files: ./coverage.out
flags: unittests
fail_ci_if_error: false
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
with:
go-version-file: go.mod
- name: Run golangci-lint
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9
with:
version: v2.8.0
args: --tests=false
codeql:
name: CodeQL Analysis
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Initialize CodeQL
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3
with:
languages: go
- name: Autobuild
uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3
with:
category: "/language:go"