-
Notifications
You must be signed in to change notification settings - Fork 13
145 lines (120 loc) · 4.18 KB
/
dance.yml
File metadata and controls
145 lines (120 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
---
name: Dance
on:
pull_request:
types:
- unlabeled # if GitHub Actions stuck, add and remove "not ready" label to force rebuild
- opened
- reopened
- synchronize
push:
branches:
- main
schedule:
- cron: "12 3 * * *" # after FerretDB's Packages workflow
env:
GOPATH: /home/runner/go
GOCACHE: /home/runner/go/cache
GOLANGCI_LINT_CACHE: /home/runner/go/cache/lint
GOMODCACHE: /home/runner/go/mod
GOPROXY: https://proxy.golang.org
GOTOOLCHAIN: local
jobs:
dance:
name: ${{ matrix.config }}
# https://www.ubicloud.com/docs/github-actions-integration/price-performance
# https://www.ubicloud.com/docs/about/pricing#github-actions
# https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates
runs-on: ubicloud-standard-8
timeout-minutes: 45
# Do not run this job in parallel for any PR change or branch push
# to save some resources.
concurrency:
group: ${{ github.workflow }}-dance-${{ matrix.config }}-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
if: github.event_name != 'pull_request' || !contains(github.event.pull_request.labels.*.name, 'not ready')
strategy:
fail-fast: false
matrix:
include:
- { config: dotnet-example }
- { config: java-example }
- { config: nodejs-example }
- { config: python-example }
- { config: mongo-tools }
- { config: mongo-core-test, verbose: true } # verbose to view test output on CI
- { config: ycsb-workloada }
- { config: ycsb-workloada2 }
- { config: ycsb-workloadb }
- { config: ycsb-workloadb2 }
- { config: ycsb-workloadc }
- { config: ycsb-workloadc2 }
steps:
- name: Install Tailscale
if: github.event_name != 'pull_request'
uses: tailscale/github-action@v3
with:
oauth-client-id: ${{ secrets.TAILSCALE_CLIENT_ID }}
oauth-secret: ${{ secrets.TAILSCALE_SECRET }}
tags: tag:ci
version: latest
- name: Create directory for logs
run: mkdir -p /tmp/logs
- name: Start pinging Tailscale
if: github.event_name != 'pull_request'
run: tailscale ping -c 0 --until-direct --timeout 2s --verbose ${{ secrets.DANCE_PUSH_HOST }} 2>&1 > /tmp/logs/tailscale.txt &
- name: Checkout code
uses: actions/checkout@v5
with:
submodules: true
- name: Setup Go
uses: FerretDB/github-actions/setup-go@main
with:
cache-key: dance
- name: Install Task
run: go generate -x
working-directory: tools
- name: Start environment
run: bin/task env-up-detach
- name: Run init
run: bin/task init build
- name: Dance!
run: bin/task dance CONFIG=${{ matrix.config }}.yml VERBOSE_FLAG=${{ matrix.verbose || 'false' }}
env:
DANCE_PUSH: ${{ secrets.DANCE_PUSH }}
- name: Setup nushell
if: failure()
uses: FerretDB/github-actions/setup-nushell@main
- name: Show Docker ports
if: failure()
run: docker compose ps -a --no-trunc
- name: Show listening ports
if: failure()
shell: /usr/local/bin/nu {0}
run: |
docker compose ps -a --format json |
from json -o |
get Publishers |
flatten |
where PublishedPort != 0 |
get PublishedPort |
uniq |
each { |port| lsof -nPi $':($port)' +c0 }
- name: Collect logs
if: failure()
run: bin/task env-logs-collect > /tmp/logs/compose.txt
- name: Compress logs before upload
if: failure()
run: zip -r -q -9 logs.zip /tmp/logs
- name: Upload logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: logs-${{ matrix.config }}
path: logs.zip
retention-days: 3
# ignore `go mod tidy` being applied to the Go driver, etc
- name: Check dirty
run: |
git status --ignore-submodules=none
git diff --ignore-submodules=all --exit-code