mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-20 11:51:17 +00:00
[ci] Add integration tests for database servers
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
db3c4f4efa
commit
a3a134fe36
2 changed files with 117 additions and 2 deletions
102
.github/workflows/test-and-build.yml
vendored
102
.github/workflows/test-and-build.yml
vendored
|
@ -85,4 +85,106 @@ jobs:
|
||||||
draft: false
|
draft: false
|
||||||
generateReleaseNotes: false
|
generateReleaseNotes: false
|
||||||
|
|
||||||
|
database-integration:
|
||||||
|
# Only execute db-server integration tests when sqlite based tests did run successfully
|
||||||
|
needs: [test-and-build]
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: luzifer/archlinux
|
||||||
|
env:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
GOPATH: /go
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
database: [mariadb, mysql, postgres]
|
||||||
|
|
||||||
|
services:
|
||||||
|
mariadb:
|
||||||
|
image: mariadb:11
|
||||||
|
env:
|
||||||
|
MYSQL_PASSWORD: twitch-bot-pass
|
||||||
|
MYSQL_ROOT_PASSWORD: root-pass
|
||||||
|
MYSQL_USER: twitch-bot
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
image: mysql:8
|
||||||
|
env:
|
||||||
|
MYSQL_PASSWORD: twitch-bot-pass
|
||||||
|
MYSQL_ROOT_PASSWORD: root-pass
|
||||||
|
MYSQL_USER: twitch-bot
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: postgres:15
|
||||||
|
env:
|
||||||
|
POSTGRES_PASSWORD: twitch-bot-pass
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Enable custom AUR package repo
|
||||||
|
run: echo -e "[luzifer]\nSigLevel = Never\nServer = https://archrepo.hub.luzifer.io/\$arch" >>/etc/pacman.conf
|
||||||
|
|
||||||
|
- name: Install required packages
|
||||||
|
run: |
|
||||||
|
pacman -Syy --noconfirm \
|
||||||
|
docker \
|
||||||
|
git \
|
||||||
|
go \
|
||||||
|
make \
|
||||||
|
mariadb-clients
|
||||||
|
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Marking workdir safe
|
||||||
|
run: git config --global --add safe.directory /__w/twitch-bot/twitch-bot
|
||||||
|
|
||||||
|
# --- MySQL
|
||||||
|
|
||||||
|
- name: Set up MySQL service
|
||||||
|
if: matrix.database == 'mysql'
|
||||||
|
run: |
|
||||||
|
mariadb -h mysql -u root --password=root-pass <<EOF
|
||||||
|
CREATE DATABASE integration DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
|
||||||
|
GRANT ALL ON integration.* TO 'twitch-bot'@'%';
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- name: Run tests against MySQL
|
||||||
|
if: matrix.database == 'mysql'
|
||||||
|
env:
|
||||||
|
GO_TEST_DB_ENGINE: mysql
|
||||||
|
GO_TEST_DB_DSN: twitch-bot:twitch-bot-pass@tcp(mysql:3306)/integration?charset=utf8mb4&parseTime=True
|
||||||
|
run: make test
|
||||||
|
|
||||||
|
# --- MariaDB
|
||||||
|
|
||||||
|
- name: Set up MariaDB service
|
||||||
|
if: matrix.database == 'mariadb'
|
||||||
|
run: |
|
||||||
|
mariadb -h mariadb -u root --password=root-pass <<EOF
|
||||||
|
CREATE DATABASE integration DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
|
||||||
|
GRANT ALL ON integration.* TO 'twitch-bot'@'%';
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- name: Run tests against MariaDB
|
||||||
|
if: matrix.database == 'mariadb'
|
||||||
|
env:
|
||||||
|
GO_TEST_DB_ENGINE: mysql
|
||||||
|
GO_TEST_DB_DSN: twitch-bot:twitch-bot-pass@tcp(mariadb:3306)/integration?charset=utf8mb4&parseTime=True
|
||||||
|
run: make test
|
||||||
|
|
||||||
|
# --- PostgreSQL
|
||||||
|
|
||||||
|
- name: Run tests against PostgreSQL
|
||||||
|
if: matrix.database == 'postgres'
|
||||||
|
env:
|
||||||
|
GO_TEST_DB_ENGINE: postgres
|
||||||
|
GO_TEST_DB_DSN: host=postgres user=postgres password=twitch-bot-pass dbname=postgres port=5432 sslmode=disable timezone=UTC
|
||||||
|
run: make test
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
17
main_test.go
17
main_test.go
|
@ -13,9 +13,22 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
var err error
|
var (
|
||||||
|
dbEngine = "sqlite"
|
||||||
|
dbDSN = "file::memory:?cache=shared"
|
||||||
|
|
||||||
if db, err = database.New("sqlite", "file::memory:?cache=shared", "encpass"); err != nil {
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
if v := os.Getenv("GO_TEST_DB_ENGINE"); v != "" {
|
||||||
|
dbEngine = v
|
||||||
|
}
|
||||||
|
|
||||||
|
if v := os.Getenv("GO_TEST_DB_DSN"); v != "" {
|
||||||
|
dbDSN = v
|
||||||
|
}
|
||||||
|
|
||||||
|
if db, err = database.New(dbEngine, dbDSN, "go-test-static-encryption"); err != nil {
|
||||||
log.WithError(err).Fatal("opening storage backend")
|
log.WithError(err).Fatal("opening storage backend")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue