vikunja/.drone.yml

749 lines
19 KiB
YAML
Raw Normal View History

2021-08-11 23:28:21 +02:00
---
2019-01-11 22:46:51 +00:00
kind: pipeline
type: docker
2019-01-11 22:46:51 +00:00
name: testing
workspace:
2019-04-22 14:20:25 +02:00
base: /go
2019-01-11 22:46:51 +00:00
path: src/code.vikunja.io/api
volumes:
- name: tmp-sqlite-unit
temp:
medium: memory
- name: tmp-sqlite-integration
temp:
medium: memory
- name: tmp-sqlite-migration
temp:
medium: memory
- name: tmp-mysql-unit
temp:
medium: memory
- name: tmp-mysql-integration
temp:
medium: memory
- name: tmp-mysql-migration
temp:
medium: memory
- name: tmp-postgres-unit
temp:
medium: memory
- name: tmp-postgres-integration
temp:
medium: memory
- name: tmp-postgres-migration
temp:
medium: memory
2019-01-11 22:46:51 +00:00
services:
- name: test-mysql-unit
2019-04-21 18:18:17 +00:00
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: vikunjatest
MYSQL_DATABASE: vikunjatest
volumes:
- name: tmp-mysql-unit
path: /var/lib/mysql
- name: test-mysql-integration
2019-01-11 22:46:51 +00:00
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: vikunjatest
MYSQL_DATABASE: vikunjatest
volumes:
- name: tmp-mysql-integration
path: /var/lib/mysql
- name: test-mysql-migration
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: vikunjatest
MYSQL_DATABASE: vikunjatest
volumes:
- name: tmp-mysql-migration
path: /var/lib/mysql
- name: test-postgres-unit
image: postgres:14
environment:
POSTGRES_PASSWORD: vikunjatest
POSTGRES_DB: vikunjatest
volumes:
- name: tmp-postgres-unit
path: /var/lib/postgresql/data
commands:
- docker-entrypoint.sh -c fsync=off -c full_page_writes=off # turns of wal
- name: test-postgres-integration
image: postgres:14
environment:
POSTGRES_PASSWORD: vikunjatest
POSTGRES_DB: vikunjatest
volumes:
- name: tmp-postgres-integration
path: /var/lib/postgresql/data
commands:
- docker-entrypoint.sh -c fsync=off -c full_page_writes=off # turns of wal
- name: test-postgres-migration
image: postgres:14
environment:
POSTGRES_PASSWORD: vikunjatest
POSTGRES_DB: vikunjatest
volumes:
- name: tmp-postgres-migration
path: /var/lib/postgresql/data
commands:
- docker-entrypoint.sh -c fsync=off -c full_page_writes=off # turns of wal
2019-01-11 22:46:51 +00:00
trigger:
branch:
include:
2021-02-10 18:50:15 +01:00
- main
event:
include:
- push
- pull_request
2019-01-11 22:46:51 +00:00
steps:
- name: fetch-tags
image: docker:git
commands:
- git fetch --tags
# We're statically compiling the magefile to avoid race condition issues caused by multiple pipeline steps
# compiling the same magefile at the same time. It's also faster if each step does not need to compile it first.
- name: mage
image: vikunja/golang-build:latest
pull: always
environment:
GOPROXY: 'https://goproxy.kolaente.de'
commands:
- mage -compile ./mage-static
2021-02-10 20:49:20 +01:00
- env
when:
event: [ push, tag, pull_request ]
2023-04-02 16:58:58 +02:00
- name: prepare-build
2019-01-11 22:46:51 +00:00
image: vikunja/golang-build:latest
pull: always
2019-05-22 17:48:48 +00:00
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
depends_on: [ mage ]
2023-04-02 16:58:58 +02:00
commands:
- ./mage-static do-the-swag
when:
event: [ push, tag, pull_request ]
- name: build
image: vikunja/golang-build:latest
pull: always
environment:
GOPROXY: 'https://goproxy.kolaente.de'
depends_on: [ prepare-build ]
commands:
- ./mage-static build:build
when:
event: [ push, tag, pull_request ]
- name: lint
image: golang:1.19-alpine
pull: always
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
depends_on: [ build ]
2019-01-11 22:46:51 +00:00
commands:
- export "GOROOT=$(go env GOROOT)"
2022-08-03 17:19:29 +02:00
- apk --no-cache add build-base git
- wget -O - -q https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.52.1
- ./mage-static check:golangci
when:
event: [ push, tag, pull_request ]
- name: test-migration-prepare
image: kolaente/toolbox:latest
pull: always
commands:
# Get the latest version
- wget https://dl.vikunja.io/api/unstable/vikunja-unstable-linux-amd64-full.zip -q -O vikunja-latest.zip
- unzip vikunja-latest.zip vikunja-unstable-linux-amd64
- name: test-migration-sqlite
image: vikunja/golang-build:latest
pull: always
depends_on: [ test-migration-prepare, build ]
environment:
VIKUNJA_DATABASE_TYPE: sqlite
VIKUNJA_DATABASE_PATH: /db/vikunja-migration-test.db
VIKUNJA_LOG_DATABASE: stdout
VIKUNJA_LOG_DATABASELEVEL: debug
volumes:
- name: tmp-sqlite-migration
path: /db
commands:
- ./vikunja-unstable-linux-amd64 migrate
# Run the migrations from the binary build in the step before
- ./vikunja migrate
when:
event: [ push, tag, pull_request ]
- name: test-migration-mysql
image: vikunja/golang-build:latest
pull: always
depends_on: [ test-migration-prepare, build ]
environment:
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_HOST: test-mysql-migration
VIKUNJA_DATABASE_USER: root
VIKUNJA_DATABASE_PASSWORD: vikunjatest
VIKUNJA_DATABASE_DATABASE: vikunjatest
VIKUNJA_LOG_DATABASE: stdout
VIKUNJA_LOG_DATABASELEVEL: debug
commands:
- ./vikunja-unstable-linux-amd64 migrate
# Run the migrations from the binary build in the step before
- ./vikunja migrate
when:
event: [ push, tag, pull_request ]
- name: test-migration-psql
image: vikunja/golang-build:latest
pull: always
depends_on: [ test-migration-prepare, build ]
environment:
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_HOST: test-postgres-migration
VIKUNJA_DATABASE_USER: postgres
VIKUNJA_DATABASE_PASSWORD: vikunjatest
VIKUNJA_DATABASE_DATABASE: vikunjatest
VIKUNJA_DATABASE_SSLMODE: disable
VIKUNJA_LOG_DATABASE: stdout
VIKUNJA_LOG_DATABASELEVEL: debug
commands:
- ./vikunja-unstable-linux-amd64 migrate
# Run the migrations from the binary build in the step before
- ./vikunja migrate
when:
event: [ push, tag, pull_request ]
2019-01-11 22:46:51 +00:00
- name: test
image: vikunja/golang-build:latest
pull: always
2020-06-28 14:00:10 +02:00
environment:
GOPROXY: 'https://goproxy.kolaente.de'
2019-01-11 22:46:51 +00:00
commands:
- ./mage-static test:unit
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test-sqlite
image: vikunja/golang-build:latest
pull: always
2019-01-11 22:46:51 +00:00
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
2019-01-11 22:46:51 +00:00
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: sqlite
VIKUNJA_DATABASE_PATH: /db/vikunja-test.db
volumes:
- name: tmp-sqlite-unit
path: /db
2019-01-11 22:46:51 +00:00
commands:
- ./mage-static test:unit
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test-mysql
image: vikunja/golang-build:latest
pull: always
2019-01-11 22:46:51 +00:00
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
2019-01-11 22:46:51 +00:00
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_HOST: test-mysql-unit
2019-01-11 22:46:51 +00:00
VIKUNJA_DATABASE_USER: root
VIKUNJA_DATABASE_PASSWORD: vikunjatest
VIKUNJA_DATABASE_DATABASE: vikunjatest
commands:
- ./mage-static test:unit
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test-postgres
image: vikunja/golang-build:latest
pull: always
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_HOST: test-postgres-unit
VIKUNJA_DATABASE_USER: postgres
VIKUNJA_DATABASE_PASSWORD: vikunjatest
VIKUNJA_DATABASE_DATABASE: vikunjatest
VIKUNJA_DATABASE_SSLMODE: disable
commands:
- ./mage-static test:unit
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
when:
event: [ push, tag, pull_request ]
2019-04-21 18:18:17 +00:00
- name: integration-test
image: vikunja/golang-build:latest
pull: always
2020-06-28 14:00:10 +02:00
environment:
GOPROXY: 'https://goproxy.kolaente.de'
2019-04-21 18:18:17 +00:00
commands:
- ./mage-static test:integration
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
2019-04-21 18:18:17 +00:00
when:
event: [ push, tag, pull_request ]
- name: integration-test-sqlite
image: vikunja/golang-build:latest
pull: always
2019-04-21 18:18:17 +00:00
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
2019-04-21 18:18:17 +00:00
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: sqlite
VIKUNJA_DATABASE_PATH: /db/vikunja-test.db
volumes:
- name: tmp-sqlite-integration
path: /db
2019-04-21 18:18:17 +00:00
commands:
- ./mage-static test:integration
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
2019-04-21 18:18:17 +00:00
when:
event: [ push, tag, pull_request ]
- name: integration-test-mysql
image: vikunja/golang-build:latest
pull: always
2019-04-21 18:18:17 +00:00
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
2019-04-21 18:18:17 +00:00
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_HOST: test-mysql-integration
2019-04-21 18:18:17 +00:00
VIKUNJA_DATABASE_USER: root
VIKUNJA_DATABASE_PASSWORD: vikunjatest
VIKUNJA_DATABASE_DATABASE: vikunjatest
commands:
- ./mage-static test:integration
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
2019-04-21 18:18:17 +00:00
when:
event: [ push, tag, pull_request ]
- name: integration-test-postgres
image: vikunja/golang-build:latest
pull: always
environment:
2020-06-28 14:00:10 +02:00
GOPROXY: 'https://goproxy.kolaente.de'
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_HOST: test-postgres-integration
VIKUNJA_DATABASE_USER: postgres
VIKUNJA_DATABASE_PASSWORD: vikunjatest
VIKUNJA_DATABASE_DATABASE: vikunjatest
VIKUNJA_DATABASE_SSLMODE: disable
commands:
- ./mage-static test:integration
2023-04-02 16:58:58 +02:00
depends_on: [ fetch-tags, prepare-build ]
when:
event: [ push, tag, pull_request ]
2019-01-11 22:46:51 +00:00
---
########
# Build a release when tagging
########
2019-01-11 22:46:51 +00:00
kind: pipeline
type: docker
name: release
2020-06-22 21:33:55 +02:00
2019-04-21 23:04:46 +02:00
depends_on:
- testing
2019-01-11 22:46:51 +00:00
workspace:
base: /source
path: /
2019-01-11 22:46:51 +00:00
trigger:
ref:
2021-02-10 18:50:15 +01:00
- refs/heads/main
- "refs/tags/**"
2019-01-11 22:46:51 +00:00
steps:
# Needed to get the versions right as they depend on tags
- name: fetch-tags
image: docker:git
commands:
- git fetch --tags
# We're statically compiling the magefile to avoid race condition issues caused by multiple pipeline steps
# compiling the same magefile at the same time. It's also faster if each step does not need to compile it first.
- name: mage
image: vikunja/golang-build:latest
pull: always
environment:
GOPROXY: 'https://goproxy.kolaente.de'
commands:
- mage -compile ./mage-static
when:
event: [ push, tag, pull_request ]
2019-01-11 22:46:51 +00:00
- name: before-static-build
image: techknowlogick/xgo:latest
pull: always
2019-01-11 22:46:51 +00:00
commands:
2019-04-22 14:02:18 +02:00
- export PATH=$PATH:$GOPATH/bin
- go install github.com/magefile/mage
- ./mage-static release:dirs
- ./mage-static do-the-swag
depends_on: [ fetch-tags, mage ]
2019-01-11 22:46:51 +00:00
- name: static-build-windows
image: techknowlogick/xgo:latest
pull: always
2019-01-11 22:46:51 +00:00
environment:
# This path does not exist. However, when we set the gopath to /go, the build fails. Not sure why.
# Leaving this here until we know how to resolve this properly.
GOPATH: /srv/app
2019-01-11 22:46:51 +00:00
commands:
2019-04-22 14:02:18 +02:00
- export PATH=$PATH:$GOPATH/bin
- go install github.com/magefile/mage
- ./mage-static release:windows
2019-01-11 22:46:51 +00:00
depends_on: [ before-static-build ]
2019-01-14 20:48:02 +01:00
- name: static-build-linux
image: techknowlogick/xgo:latest
pull: always
2019-01-14 20:48:02 +01:00
environment:
# This path does not exist. However, when we set the gopath to /go, the build fails. Not sure why.
# Leaving this here until we know how to resolve this properly.
GOPATH: /srv/app
2019-01-14 20:48:02 +01:00
commands:
2019-04-22 14:02:18 +02:00
- export PATH=$PATH:$GOPATH/bin
- go install github.com/magefile/mage
- ./mage-static release:linux
2019-01-14 20:48:02 +01:00
depends_on: [ before-static-build ]
- name: static-build-darwin
image: techknowlogick/xgo:latest
pull: always
2019-01-14 20:48:02 +01:00
environment:
# This path does not exist. However, when we set the gopath to /go, the build fails. Not sure why.
# Leaving this here until we know how to resolve this properly.
GOPATH: /srv/app
2019-01-14 20:48:02 +01:00
commands:
2019-04-22 14:31:46 +02:00
- export PATH=$PATH:$GOPATH/bin
- go install github.com/magefile/mage
- ./mage-static release:darwin
2019-01-14 20:48:02 +01:00
depends_on: [ before-static-build ]
2019-01-11 22:46:51 +00:00
- name: after-build-compress
image: kolaente/upx
pull: always
2019-01-11 22:46:51 +00:00
depends_on:
- static-build-windows
2019-01-14 20:48:02 +01:00
- static-build-linux
- static-build-darwin
commands:
- ./mage-static release:compress
- name: after-build-static
image: techknowlogick/xgo:latest
pull: always
depends_on:
- after-build-compress
2019-01-11 22:46:51 +00:00
commands:
- go install github.com/magefile/mage
- ./mage-static release:copy
- ./mage-static release:check
- ./mage-static release:os-package
- ./mage-static release:zip
2019-01-11 22:46:51 +00:00
2019-01-12 23:58:17 +01:00
- name: sign-release
image: plugins/gpgsign:1
pull: always
2019-01-13 00:25:02 +01:00
depends_on: [ after-build-static ]
2019-01-12 23:58:17 +01:00
settings:
key:
from_secret: gpg_privkey
passphrase:
from_secret: gpg_password
files:
2019-01-13 00:17:45 +01:00
- dist/zip/*
detach_sign: true
2019-01-14 20:36:40 +01:00
# Push the releases to our pseudo-s3-bucket
- name: release-latest
image: plugins/s3
pull: always
2019-01-11 22:46:51 +00:00
settings:
2020-07-14 13:43:35 +02:00
bucket: vikunja-releases
2019-01-11 22:46:51 +00:00
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
2020-07-14 13:43:35 +02:00
endpoint: https://s3.fr-par.scw.cloud
region: fr-par
2019-01-11 22:46:51 +00:00
path_style: true
strip_prefix: dist/zip/
source: dist/zip/*
2021-02-10 19:56:51 +01:00
target: /api/unstable/
2020-10-19 20:35:23 +02:00
when:
2020-07-14 14:45:16 +02:00
branch:
2021-02-10 18:50:15 +01:00
- main
event:
- push
2019-01-13 00:25:02 +01:00
depends_on: [ sign-release ]
2019-01-11 22:46:51 +00:00
- name: release-version
image: plugins/s3
pull: always
2019-01-11 22:46:51 +00:00
settings:
2020-07-14 13:43:35 +02:00
bucket: vikunja-releases
2019-01-11 22:46:51 +00:00
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
2020-07-14 13:43:35 +02:00
endpoint: https://s3.fr-par.scw.cloud
region: fr-par
2019-01-11 22:46:51 +00:00
path_style: true
strip_prefix: dist/zip/
source: dist/zip/*
2020-03-01 22:51:50 +01:00
target: /api/${DRONE_TAG##v}/
2020-10-19 20:35:23 +02:00
when:
event:
- tag
2019-01-14 18:47:00 +01:00
depends_on: [ sign-release ]
2019-01-14 23:53:53 +01:00
# Build os packages and push it to our bucket
- name: build-os-packages-unstable
image: goreleaser/nfpm:v2.29.0
pull: always
2019-01-21 21:52:26 +00:00
commands:
- apk add git go
- ./mage-static release:packages
- mv dist/os-packages/vikunja*.x86_64.rpm dist/os-packages/vikunja-unstable-x86_64.rpm
- mv dist/os-packages/vikunja*_amd64.deb dist/os-packages/vikunja-unstable-amd64.deb
- mv dist/os-packages/vikunja*_x86_64.apk dist/os-packages/vikunja-unstable-x86_64.apk
when:
branch:
- main
event:
- push
depends_on: [ after-build-compress ]
- name: build-os-packages-version
image: goreleaser/nfpm:v2.29.0
pull: always
commands:
- apk add git go
- ./mage-static release:packages
- mv dist/os-packages/vikunja*.x86_64.rpm dist/os-packages/vikunja-${DRONE_TAG##v}-x86_64.rpm
- mv dist/os-packages/vikunja*_amd64.deb dist/os-packages/vikunja-${DRONE_TAG##v}-amd64.deb
- mv dist/os-packages/vikunja*_x86_64.apk dist/os-packages/vikunja-${DRONE_TAG##v}-x86_64.apk
when:
event:
- tag
depends_on: [ after-build-compress ]
2019-01-21 21:52:26 +00:00
# Push the os releases to our pseudo-s3-bucket
- name: release-os-latest
image: plugins/s3
pull: always
settings:
bucket: vikunja-releases
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
endpoint: https://s3.fr-par.scw.cloud
region: fr-par
path_style: true
strip_prefix: dist/os-packages/
source: dist/os-packages/*
2021-02-10 18:50:15 +01:00
target: /api/unstable/
2020-10-19 20:35:23 +02:00
when:
branch:
2021-02-10 18:50:15 +01:00
- main
event:
- push
depends_on: [ build-os-packages-unstable ]
- name: release-os-version
image: plugins/s3
pull: always
settings:
bucket: vikunja-releases
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
endpoint: https://s3.fr-par.scw.cloud
region: fr-par
path_style: true
strip_prefix: dist/os-packages/
source: dist/os-packages/*
target: /api/${DRONE_TAG##v}/
2020-10-19 20:35:23 +02:00
when:
event:
- tag
depends_on: [ build-os-packages-version ]
2019-01-21 21:52:26 +00:00
2019-02-17 19:53:04 +00:00
---
kind: pipeline
type: docker
2019-02-17 19:53:04 +00:00
name: deploy-docs
workspace: