[CLI] Add database migration tooling #396
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
--- | |
name: test-and-build | |
on: | |
push: | |
branches-ignore: | |
- stable | |
tags: | |
- 'v*' | |
permissions: | |
contents: write | |
jobs: | |
test-and-build: | |
defaults: | |
run: | |
shell: bash | |
container: | |
image: luzifer/archlinux | |
env: | |
CGO_ENABLED: 0 | |
GOPATH: /go | |
runs-on: ubuntu-latest | |
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 \ | |
awk \ | |
curl \ | |
diffutils \ | |
git \ | |
go \ | |
golangci-lint-bin \ | |
make \ | |
nodejs-lts-hydrogen \ | |
npm \ | |
tar \ | |
trivy \ | |
unzip \ | |
which \ | |
zip | |
- uses: actions/checkout@v3 | |
- name: Marking workdir safe | |
run: git config --global --add safe.directory /__w/twitch-bot/twitch-bot | |
- name: Lint and test code | |
run: make lint test frontend_lint | |
- name: Build release | |
run: make publish | |
env: | |
FORCE_SKIP_UPLOAD: 'true' | |
MOD_MODE: readonly | |
NODE_ENV: production | |
NO_TESTS: 'true' | |
PACKAGES: '.' | |
- name: Execute Trivy scan | |
run: make trivy | |
- name: Extract changelog | |
run: 'awk "/^#/ && ++c==2{exit}; /^#/f" "History.md" | tail -n +2 >release_changelog.md' | |
- name: Update stable branch | |
if: startsWith(github.ref, 'refs/tags/') | |
run: | | |
git branch -f stable ${GITHUB_SHA} | |
git push -f origin stable | |
- name: Release | |
uses: ncipollo/release-action@v1 | |
if: startsWith(github.ref, 'refs/tags/') | |
with: | |
artifacts: '.build/*' | |
bodyFile: release_changelog.md | |
draft: 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 | |
... |