vikunja/.drone1.yml

626 lines
15 KiB
YAML
Raw Normal View History

2019-01-11 22:46:51 +00:00
kind: pipeline
name: testing
workspace:
2019-04-22 12:20:25 +00:00
base: /go
2019-01-11 22:46:51 +00:00
path: src/code.vikunja.io/api
services:
- name: test-mysql-unit
2019-04-21 18:18:17 +00:00
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: vikunjatest
MYSQL_DATABASE: vikunjatest
- name: test-mysql-integration
2019-01-11 22:46:51 +00:00
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: vikunjatest
MYSQL_DATABASE: vikunjatest
- name: test-mysql-migration
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: vikunjatest
MYSQL_DATABASE: vikunjatest
- name: test-postgres-unit
image: postgres:12
environment:
POSTGRES_PASSWORD: vikunjatest
POSTGRES_DB: vikunjatest
- name: test-postgres-integration
image: postgres:12
environment:
POSTGRES_PASSWORD: vikunjatest
POSTGRES_DB: vikunjatest
- name: test-postgres-migration
image: postgres:12
environment:
POSTGRES_PASSWORD: vikunjatest
POSTGRES_DB: vikunjatest
2019-01-11 22:46:51 +00:00
trigger:
branch:
include:
- master
event:
include:
- push
- pull_request
2019-01-11 22:46:51 +00:00
steps:
- name: fetch-tags
image: docker:git
commands:
- git fetch --tags
- name: build
image: vikunja/golang-build:latest
pull: true
2019-05-22 17:48:48 +00:00
environment:
GOFLAGS: '-mod=vendor'
commands:
- make build
when:
event: [ push, tag, pull_request ]
- name: lint
image: vikunja/golang-build:latest
pull: true
environment:
GOFLAGS: '-mod=vendor'
depends_on: [ build ]
2019-01-11 22:46:51 +00:00
commands:
- make generate
2019-01-11 22:46:51 +00:00
- make lint
- make fmt-check
# - make got-swag # Commented out until we figured out how to get this working on drone
- make ineffassign-check
- make misspell-check
- make goconst-check
2019-02-18 19:32:41 +00:00
- make gocyclo-check
2019-04-23 08:34:06 +00:00
- make static-check
2020-04-13 21:04:59 +00:00
- wget -O - -q https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s -- -b $GOPATH/bin v2.2.0 # Need to manually install as it does not support being installed via go modules like the rest.
2020-04-13 20:30:09 +00:00
- make gosec-check
when:
event: [ push, tag, pull_request ]
- name: test-migration-prepare
image: kolaente/toolbox:latest
pull: true
commands:
# Get the latest version
- wget https://dl.vikunja.io/api/master/vikunja-master-linux-amd64-full.zip -q -O vikunja-latest.zip
- unzip vikunja-latest.zip vikunja-master-linux-amd64
- name: test-migration-sqlite
image: kolaente/toolbox:latest
pull: true
depends_on: [ test-migration-prepare, build ]
environment:
VIKUNJA_DATABASE_TYPE: sqlite
VIKUNJA_DATABASE_PATH: ./vikunja-migration-test.db
VIKUNJA_LOG_DATABASE: stdout
VIKUNJA_LOG_DATABASELEVEL: debug
commands:
- ./vikunja-master-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: kolaente/toolbox:latest
pull: true
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-master-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: kolaente/toolbox:latest
pull: true
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-master-linux-amd64 migrate
# Run the migrations from the binary build in the step before
- ./vikunja migrate
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test
image: vikunja/golang-build:latest
pull: true
commands:
- make generate
2019-01-11 22:46:51 +00:00
- make test
depends_on: [ fetch-tags ]
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test-sqlite
image: vikunja/golang-build:latest
pull: true
environment:
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: sqlite
commands:
- make generate
2019-01-11 22:46:51 +00:00
- make test
depends_on: [ fetch-tags ]
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test-mysql
image: vikunja/golang-build:latest
pull: true
environment:
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:
- make generate
2019-01-11 22:46:51 +00:00
- make test
depends_on: [ fetch-tags ]
2019-01-11 22:46:51 +00:00
when:
event: [ push, tag, pull_request ]
- name: test-postgres
image: vikunja/golang-build:latest
pull: true
environment:
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:
- make generate
- make test
depends_on: [ fetch-tags ]
when:
event: [ push, tag, pull_request ]
2019-04-21 18:18:17 +00:00
- name: integration-test
image: vikunja/golang-build:latest
pull: true
commands:
- make generate
2019-04-21 18:18:17 +00:00
- make integration-test
depends_on: [ fetch-tags ]
2019-04-21 18:18:17 +00:00
when:
event: [ push, tag, pull_request ]
- name: integration-test-sqlite
image: vikunja/golang-build:latest
pull: true
environment:
VIKUNJA_TESTS_USE_CONFIG: 1
VIKUNJA_DATABASE_TYPE: sqlite
commands:
- make generate
2019-04-21 18:18:17 +00:00
- make integration-test
depends_on: [ fetch-tags ]
2019-04-21 18:18:17 +00:00
when:
event: [ push, tag, pull_request ]
- name: integration-test-mysql
image: vikunja/golang-build:latest
pull: true
environment:
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:
- make generate
2019-04-21 18:18:17 +00:00
- make integration-test
depends_on: [ fetch-tags ]
2019-04-21 18:18:17 +00:00
when:
event: [ push, tag, pull_request ]
- name: integration-test-postgres
image: vikunja/golang-build:latest
pull: true
environment:
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:
- make generate
- make integration-test
depends_on: [ fetch-tags ]
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
name: release
2019-04-21 21:04:46 +00:00
depends_on:
- testing
2019-01-11 22:46:51 +00:00
workspace:
2019-04-22 12:20:25 +00:00
base: /go
2019-01-11 22:46:51 +00:00
path: src/code.vikunja.io/api
trigger:
ref:
- refs/heads/master
- "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
2019-01-11 22:46:51 +00:00
- name: before-static-build
2019-04-22 11:27:26 +00:00
image: techknowlogick/xgo:latest
2019-01-11 22:46:51 +00:00
pull: true
commands:
2019-04-22 12:02:18 +00:00
- export PATH=$PATH:$GOPATH/bin
- make generate
2019-01-11 22:46:51 +00:00
- make release-dirs
depends_on: [ fetch-tags ]
2019-01-11 22:46:51 +00:00
- name: static-build-windows
2019-04-22 11:27:26 +00:00
image: techknowlogick/xgo:latest
2019-01-11 22:46:51 +00:00
pull: true
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 12:02:18 +00:00
- export PATH=$PATH:$GOPATH/bin
2019-01-11 22:46:51 +00:00
- make release-windows
depends_on: [ before-static-build ]
2019-01-14 19:48:02 +00:00
- name: static-build-linux
2019-04-22 11:27:26 +00:00
image: techknowlogick/xgo:latest
2019-01-14 19:48:02 +00:00
pull: true
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 19:48:02 +00:00
commands:
2019-04-22 12:02:18 +00:00
- export PATH=$PATH:$GOPATH/bin
2019-01-14 19:48:02 +00:00
- make release-linux
depends_on: [ before-static-build ]
- name: static-build-darwin
2019-04-22 11:27:26 +00:00
image: techknowlogick/xgo:latest
2019-01-14 19:48:02 +00:00
pull: true
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 19:48:02 +00:00
commands:
2019-04-22 12:31:46 +00:00
- export PATH=$PATH:$GOPATH/bin
2019-01-14 19:48:02 +00:00
- make release-darwin
depends_on: [ before-static-build ]
2019-01-11 22:46:51 +00:00
- name: after-build-compress
image: kolaente/upx
2019-01-11 22:46:51 +00:00
pull: true
depends_on:
- static-build-windows
2019-01-14 19:48:02 +00:00
- static-build-linux
- static-build-darwin
commands:
- make release-compress
- name: after-build-static
image: techknowlogick/xgo:latest
pull: true
depends_on:
- after-build-compress
2019-01-11 22:46:51 +00:00
commands:
- make release-copy
- make release-check
- make release-os-package
- make release-zip
2019-01-12 22:58:17 +00:00
- name: sign-release
image: plugins/gpgsign:1
pull: true
2019-01-12 23:25:02 +00:00
depends_on: [ after-build-static ]
2019-01-12 22:58:17 +00:00
settings:
key:
from_secret: gpg_privkey
passphrase:
from_secret: gpg_password
files:
2019-01-12 23:17:45 +00:00
- dist/zip/*
detach_sign: true
2019-01-14 19:36:40 +00:00
# Push the releases to our pseudo-s3-bucket
- name: release-latest
2019-01-11 22:46:51 +00:00
image: plugins/s3:1
pull: true
settings:
bucket: vikunja
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
endpoint: https://storage.kolaente.de
path_style: true
strip_prefix: dist/zip/
source: dist/zip/*
2020-03-01 21:51:50 +00:00
target: /api/master/
trigger:
ref:
- refs/heads/master
2019-01-12 23:25:02 +00:00
depends_on: [ sign-release ]
2019-01-11 22:46:51 +00:00
- name: release-version
2019-01-11 22:46:51 +00:00
image: plugins/s3:1
pull: true
settings:
bucket: vikunja
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
endpoint: https://storage.kolaente.de
path_style: true
strip_prefix: dist/zip/
source: dist/zip/*
2020-03-01 21:51:50 +00:00
target: /api/${DRONE_TAG##v}/
trigger:
ref:
- "refs/tags/**"
2019-01-14 17:47:00 +00:00
depends_on: [ sign-release ]
2019-01-14 22:53:53 +00:00
2019-01-21 21:52:26 +00:00
# Build a debian package and push it to our bucket
- name: build-deb
image: kolaente/fpm
pull: true
commands:
- make build-deb
depends_on: [ static-build-linux ]
- name: deb-structure
image: kolaente/reprepro
pull: true
environment:
GPG_PRIVATE_KEY:
from_secret: gpg_privatekey
commands:
- export GPG_TTY=$(tty)
- gpg -qk
- echo "use-agent" >> ~/.gnupg/gpg.conf
- gpgconf --kill gpg-agent
- echo $GPG_PRIVATE_KEY > ~/frederik.gpg
- gpg --import ~/frederik.gpg
- mkdir debian/conf -p
- cp build/reprepro-dist-conf debian/conf/distributions
- make reprepro
depends_on: [ build-deb ]
# Push the releases to our pseudo-s3-bucket
- name: release-deb
image: plugins/s3:1
pull: true
settings:
2020-03-01 21:51:50 +00:00
bucket: vikunja
2019-01-21 21:52:26 +00:00
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
endpoint: https://storage.kolaente.de
path_style: true
strip_prefix: debian
2019-01-23 13:33:44 +00:00
source: debian/*/*/*/*/*
2020-03-01 21:51:50 +00:00
target: /deb/
2019-01-21 21:52:26 +00:00
depends_on: [ deb-structure ]
2019-02-17 19:53:04 +00:00
---
kind: pipeline
name: deploy-docs
workspace:
2019-04-22 12:20:25 +00:00
base: /go
2019-02-17 19:53:04 +00:00
path: src/code.vikunja.io/api
clone:
depth: 50
trigger:
event:
- push
branch:
- master
steps:
- name: submodules
image: docker:git
commands:
- git submodule update --init
- git submodule update --recursive --remote
2019-10-30 20:53:57 +00:00
- name: theme
image: kolaente/yarn
pull: true
group: build-static
commands:
- cd docs/themes/vikunja
- yarn --production=false
2020-06-13 21:44:05 +00:00
- ./node_modules/.bin/gulp prod
2019-10-30 20:53:57 +00:00
2019-02-17 19:53:04 +00:00
- name: build
image: monachus/hugo:v0.54.0
pull: true
commands:
- cd docs
- hugo
- mv public/docs/* public # Hugo seems to be not capable of setting a different theme for a home page, so we do this ugly hack to fix it.
- name: docker
image: plugins/docker
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/docs
context: docs/
dockerfile: docs/Dockerfile
---
kind: pipeline
type: docker
name: docker-arm-release
platform:
os: linux
arch: arm
trigger:
ref:
- refs/heads/master
- "refs/tags/**"
steps:
- name: fetch-tags
image: docker:git
commands:
- git fetch --tags
- name: docker
image: plugins/docker:linux-arm
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/api
auto_tag: true
auto_tag_suffix: linux-arm64
depends_on: [ fetch-tags ]
---
kind: pipeline
type: docker
name: docker-amd64-release
platform:
os: linux
arch: amd64
trigger:
ref:
- refs/heads/master
- "refs/tags/**"
steps:
- name: fetch-tags
image: docker:git
commands:
- git fetch --tags
- name: docker
image: plugins/docker:linux-amd64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/api
auto_tag: true
auto_tag_suffix: linux-amd64
depends_on: [ fetch-tags ]
---
kind: pipeline
type: docker
name: docker-manifest
trigger:
ref:
- refs/heads/master
- "refs/tags/**"
depends_on:
- docker-amd64-release
- docker-arm-release
steps:
- name: manifest
pull: always
image: plugins/manifest
settings:
auto_tag: true
ignore_missing: true
spec: docker-manifest.tmpl
password:
from_secret: docker_password
username:
from_secret: docker_username
---
kind: pipeline
type: docker
name: notify
trigger:
ref:
- refs/heads/master
- "refs/tags/**"
depends_on:
- release
- docker-manifest
steps:
- name: telegram
image: appleboy/drone-telegram
settings:
token:
from_secret: TELEGRAM_TOKEN
to:
from_secret: TELEGRAM_TO
message: >
{{repo.owner}}/{{repo.name}}: \[{{build.status}}] Build {{build.number}}
{{commit.author}} pushed to {{commit.branch}} {{commit.sha}}: `{{commit.message}}`
Build started at {{datetime build.started "2006-Jan-02T15:04:05Z" "GMT+2"}} finished at {{datetime build.finished "2006-Jan-02T15:04:05Z" "GMT+2"}}.
when:
status:
- success
- failure