-
Notifications
You must be signed in to change notification settings - Fork 92
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Brandur Leach <brandur@brandur.org>
- Loading branch information
Showing
139 changed files
with
22,353 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# To get started with Dependabot version updates, you'll need to specify which | ||
# package ecosystems to update and where the package manifests are located. | ||
# Please see the documentation for all configuration options: | ||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates | ||
|
||
version: 2 | ||
updates: | ||
- package-ecosystem: "gomod" | ||
directory: "/" # Location of package manifests | ||
groups: | ||
go-dependencies: | ||
update-types: | ||
- "minor" | ||
- "patch" | ||
schedule: | ||
interval: "weekly" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
name: CI | ||
|
||
env: | ||
# Database to connect to that can create other databases with `CREATE DATABASE`. | ||
ADMIN_DATABASE_URL: postgres://postgres:postgres@localhost:5432 | ||
|
||
# Just a common place for steps to put binaries they need and which is added | ||
# to GITHUB_PATH/PATH. | ||
BIN_PATH: /home/runner/bin | ||
|
||
# A suitable URL for non-test database. | ||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:5432/river_dev?sslmode=disable | ||
|
||
on: | ||
- push | ||
|
||
jobs: | ||
build_and_test: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
go-version: | ||
- "1.21" | ||
timeout-minutes: 5 | ||
|
||
services: | ||
postgres: | ||
image: postgres | ||
env: | ||
POSTGRES_PASSWORD: postgres | ||
options: >- | ||
--health-cmd pg_isready | ||
--health-interval 2s | ||
--health-timeout 5s | ||
--health-retries 5 | ||
ports: | ||
- 5432:5432 | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: Setup Go ${{ matrix.go-version }} | ||
uses: actions/setup-go@v4 | ||
with: | ||
go-version: ${{ matrix.go-version }} | ||
|
||
- name: Display Go version | ||
run: go version | ||
|
||
- name: Install dependencies | ||
run: | | ||
echo "::group::go get" | ||
go get -t ./... | ||
echo "::endgroup::" | ||
- name: Set up test DBs | ||
run: go run ./internal/cmd/testdbman create | ||
env: | ||
PGHOST: 127.0.0.1 | ||
PGPORT: 5432 | ||
PGUSER: postgres | ||
PGPASSWORD: postgres | ||
PGSSLMODE: disable | ||
|
||
- name: Test | ||
run: go test -p 1 -race ./... | ||
env: | ||
TEST_DATABASE_URL: postgres://postgres:postgres@127.0.0.1:5432/river_testdb?sslmode=disable | ||
|
||
cli: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 3 | ||
|
||
services: | ||
postgres: | ||
image: postgres | ||
env: | ||
POSTGRES_PASSWORD: postgres | ||
options: >- | ||
--health-cmd pg_isready | ||
--health-interval 2s | ||
--health-timeout 5s | ||
--health-retries 5 | ||
ports: | ||
- 5432:5432 | ||
|
||
steps: | ||
- uses: actions/setup-go@v4 | ||
with: | ||
go-version: "stable" | ||
check-latest: true | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Build CLI | ||
run: go build ./cmd/river | ||
|
||
- name: Create database | ||
run: psql --echo-errors --quiet -c '\timing off' -c "CREATE DATABASE river_dev;" ${ADMIN_DATABASE_URL} | ||
|
||
- name: river migrate-up | ||
run: ./river migrate-up --database-url $DATABASE_URL | ||
|
||
- name: river migrate-down | ||
run: ./river migrate-down --database-url $DATABASE_URL --max-steps 100 | ||
|
||
golangci: | ||
name: lint | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
# allow read access to pull request. Use with `only-new-issues` option. | ||
pull-requests: read | ||
steps: | ||
- uses: actions/setup-go@v4 | ||
with: | ||
go-version: "stable" | ||
check-latest: true | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: golangci-lint | ||
uses: golangci/golangci-lint-action@v3 | ||
with: | ||
# Optional: show only new issues if it's a pull request. The default value is `false`. | ||
only-new-issues: true | ||
|
||
version: v1.54.2 | ||
|
||
producer_sample: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 2 | ||
|
||
services: | ||
postgres: | ||
image: postgres | ||
env: | ||
POSTGRES_PASSWORD: postgres | ||
options: >- | ||
--health-cmd pg_isready | ||
--health-interval 2s | ||
--health-timeout 5s | ||
--health-retries 5 | ||
ports: | ||
- 5432:5432 | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: Setup Go ${{ matrix.go-version }} | ||
uses: actions/setup-go@v4 | ||
with: | ||
go-version: "stable" | ||
check-latest: true | ||
|
||
- name: Display Go version | ||
run: go version | ||
|
||
- name: Install dependencies | ||
run: | | ||
echo "::group::go get" | ||
go get -t ./... | ||
echo "::endgroup::" | ||
- name: Build CLI | ||
run: go build ./cmd/river | ||
|
||
- name: Create database | ||
run: psql --echo-errors --quiet -c '\timing off' -c "CREATE DATABASE river_dev;" ${ADMIN_DATABASE_URL} | ||
|
||
- name: river migrate-up | ||
run: ./river migrate-up --database-url $DATABASE_URL | ||
|
||
- name: Build producersample | ||
run: go build ./internal/cmd/producersample | ||
|
||
- name: Run producersample | ||
run: | | ||
( sleep 5 && killall -SIGTERM producersample ) & | ||
./producersample | ||
sqlc_generates: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 2 | ||
|
||
env: | ||
SQLC_VERSION: 1.22.0 | ||
|
||
steps: | ||
- name: Create BIN_PATH and add to PATH | ||
run: | | ||
mkdir -p "$BIN_PATH" | ||
echo "$BIN_PATH" >> $GITHUB_PATH | ||
- name: Install sqlc | ||
run: | | ||
curl -L https://github.com/kyleconroy/sqlc/releases/download/v${{ env.SQLC_VERSION }}/sqlc_${{ env.SQLC_VERSION }}_linux_amd64.tar.gz | tar -xz -C $BIN_PATH | ||
chmod +x $BIN_PATH/sqlc | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Run sqlc | ||
run: make generate | ||
|
||
- name: Check git diff | ||
working-directory: ./internal/dbsqlc | ||
run: | | ||
echo "Please make sure that all sqlc changes are checked in!" | ||
git diff --exit-code . |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
/river | ||
/internal/cmd/riverbench/riverbench | ||
/internal/cmd/producersample/producersample | ||
/internal/cmd/testdbman/testdbman |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
issues: | ||
exclude: | ||
- 'Error return value of .(\w+\.Rollback(.*)). is not checked' | ||
|
||
linters: | ||
presets: | ||
- bugs | ||
- comment | ||
- format | ||
- performance | ||
- style | ||
- test | ||
- unused | ||
|
||
disable: | ||
# disabled, but which we should enable with discussion | ||
- wrapcheck # checks that errors are wrapped; currently not done anywhere | ||
|
||
# disabled because we're not compliant, but which we should think about | ||
- exhaustruct # checks that properties in structs are exhaustively defined; may be a good idea | ||
- testpackage # requires tests in test packages like `river_test` | ||
|
||
# disabled because they're annoying/bad | ||
- interfacebloat # we do in fact want >10 methods on the Adapter interface or wherever we see fit. | ||
- godox # bans TODO statements; total non-starter at the moment | ||
- goerr113 # wants all errors to be defined as variables at the package level; quite obnoxious | ||
- gomnd # detects "magic numbers", which it defines as any number; annoying | ||
- ireturn # bans returning interfaces; questionable as is, but also buggy as hell; very, very annoying | ||
- lll # restricts maximum line length; annoying | ||
- nlreturn # requires a blank line before returns; annoying | ||
- wsl # a bunch of style/whitespace stuff; annoying | ||
|
||
linters-settings: | ||
depguard: | ||
rules: | ||
all: | ||
files: ["$all"] | ||
allow: | ||
deny: | ||
- desc: "Use `github.com/google/uuid` package for UUIDs instead." | ||
pkg: "github.com/xtgo/uuid" | ||
not-test: | ||
files: ["!$test"] | ||
deny: | ||
- desc: "Don't use `dbadaptertest` package outside of test environments." | ||
pkg: "github.com/riverqueue/river/internal/dbadaptertest" | ||
- desc: "Don't use `riverinternaltest` package outside of test environments." | ||
pkg: "github.com/riverqueue/river/internal/riverinternaltest" | ||
|
||
forbidigo: | ||
forbid: | ||
- msg: "Use `require` variants instead." | ||
p: '^assert\.' | ||
- msg: "Use `Func` suffix for function variables instead." | ||
p: 'Fn\b' | ||
- msg: "Use built-in `max` function instead." | ||
p: '\bmath\.Max\b' | ||
- msg: "Use built-in `min` function instead." | ||
p: '\bmath\.Min\b' | ||
|
||
gci: | ||
sections: | ||
- Standard | ||
- Default | ||
- Prefix(github.com/riverqueue) | ||
|
||
gosec: | ||
excludes: | ||
- G404 # use of non-crypto random; overly broad for our use case | ||
|
||
revive: | ||
rules: | ||
- name: unused-parameter | ||
disabled: true | ||
|
||
tagliatelle: | ||
case: | ||
rules: | ||
json: snake | ||
|
||
varnamelen: | ||
ignore-names: | ||
- db | ||
- eg | ||
- f | ||
- i | ||
- id | ||
- j | ||
- mu | ||
- t | ||
- tt # common convention for table tests | ||
- tx | ||
- wg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
.PHONY: generate | ||
generate: | ||
generate: generate/sqlc | ||
|
||
.PHONY: generate/sqlc | ||
generate/sqlc: | ||
cd internal/dbsqlc && sqlc generate |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# River | ||
|
||
River is an experimental Postgres queue for Go. | ||
|
||
## Development | ||
|
||
### Run tests | ||
|
||
Raise test databases: | ||
|
||
go run ./internal/cmd/testdbman create | ||
|
||
Run tests: | ||
|
||
go test ./... | ||
|
||
### Run lint | ||
|
||
Run the linter and try to autofix: | ||
|
||
golangci-lint run --fix | ||
|
||
### Generate sqlc | ||
|
||
The project uses sqlc (`brew install sqlc`) to generate Go targets for Postgres | ||
queries. After changing an sqlc `.sql` file, generate Go with: | ||
|
||
make generate |
Oops, something went wrong.