-
Notifications
You must be signed in to change notification settings - Fork 13
131 lines (110 loc) · 3.69 KB
/
dance.yml
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
---
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 Docker workflow
workflow_dispatch:
inputs:
ferretdb_image:
description: FerretDB Docker image
default: ghcr.io/ferretdb/ferretdb-dev:main
required: false
postgres_image:
description: PostgreSQL Docker image
default: postgres:16.4
required: false
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.project }}
# 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.project }}-${{ 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:
project:
- dotnet-example
- java-example
- python-example
- mongo-tools
- ycsb-workloada
- ycsb-workloadb
- ycsb-workloadc
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: Start pinging Tailscale
if: github.event_name != 'pull_request'
run: |
mkdir -p /tmp/logs
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@v4
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
env:
FERRETDB_IMAGE: ${{ inputs.ferretdb_image || 'ghcr.io/ferretdb/ferretdb-dev:main' }}
POSTGRES_IMAGE: ${{ inputs.postgres_image || 'postgres:16.4' }}
- name: Run init
run: bin/task init build
- name: Dance!
run: bin/task dance CONFIG=${{ matrix.project }}.yml
env:
DANCE_PUSH: ${{ secrets.DANCE_PUSH }}
- 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.project }}
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