diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..7c3e21f74 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +files/ +dist/ +logs/ + +Dockerfile +docker-manifest.tmpl +docker-manifest-unstable.tmpl +*.db +*.zip diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 000000000..54bbd8c14 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,748 @@ +--- +kind: pipeline +type: docker +name: testing + +workspace: + base: /go + 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 + + +services: + - name: test-mysql-unit + image: mariadb:10 + environment: + MYSQL_ROOT_PASSWORD: vikunjatest + MYSQL_DATABASE: vikunjatest + volumes: + - name: tmp-mysql-unit + path: /var/lib/mysql + - name: test-mysql-integration + 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 + +trigger: + branch: + include: + - main + event: + include: + - push + - pull_request + +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 + - env + when: + event: [ push, tag, pull_request ] + + - name: prepare-build + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + depends_on: [ mage ] + 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: + GOPROXY: 'https://goproxy.kolaente.de' + depends_on: [ build ] + commands: + - export "GOROOT=$(go env GOROOT)" + - 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 ] + + - name: test + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + commands: + - ./mage-static test:unit + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: test-sqlite + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + VIKUNJA_TESTS_USE_CONFIG: 1 + VIKUNJA_DATABASE_TYPE: sqlite + VIKUNJA_DATABASE_PATH: /db/vikunja-test.db + volumes: + - name: tmp-sqlite-unit + path: /db + commands: + - ./mage-static test:unit + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: test-mysql + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + VIKUNJA_TESTS_USE_CONFIG: 1 + VIKUNJA_DATABASE_TYPE: mysql + VIKUNJA_DATABASE_HOST: test-mysql-unit + VIKUNJA_DATABASE_USER: root + VIKUNJA_DATABASE_PASSWORD: vikunjatest + VIKUNJA_DATABASE_DATABASE: vikunjatest + commands: + - ./mage-static test:unit + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: test-postgres + image: vikunja/golang-build:latest + pull: always + environment: + 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 + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: integration-test + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + commands: + - ./mage-static test:integration + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: integration-test-sqlite + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + VIKUNJA_TESTS_USE_CONFIG: 1 + VIKUNJA_DATABASE_TYPE: sqlite + VIKUNJA_DATABASE_PATH: /db/vikunja-test.db + volumes: + - name: tmp-sqlite-integration + path: /db + commands: + - ./mage-static test:integration + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: integration-test-mysql + image: vikunja/golang-build:latest + pull: always + environment: + GOPROXY: 'https://goproxy.kolaente.de' + VIKUNJA_TESTS_USE_CONFIG: 1 + VIKUNJA_DATABASE_TYPE: mysql + VIKUNJA_DATABASE_HOST: test-mysql-integration + VIKUNJA_DATABASE_USER: root + VIKUNJA_DATABASE_PASSWORD: vikunjatest + VIKUNJA_DATABASE_DATABASE: vikunjatest + commands: + - ./mage-static test:integration + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + + - name: integration-test-postgres + image: vikunja/golang-build:latest + pull: always + environment: + 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 + depends_on: [ fetch-tags, prepare-build ] + when: + event: [ push, tag, pull_request ] + +--- +######## +# Build a release when tagging +######## + +kind: pipeline +type: docker +name: release + +depends_on: + - testing + +workspace: + base: /source + path: / + +trigger: + ref: + - refs/heads/main + - "refs/tags/**" + +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 ] + + - name: before-static-build + image: techknowlogick/xgo:latest + pull: always + commands: + - 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 ] + + - name: static-build-windows + image: techknowlogick/xgo:latest + pull: always + 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 + commands: + - export PATH=$PATH:$GOPATH/bin + - go install github.com/magefile/mage + - ./mage-static release:windows + depends_on: [ before-static-build ] + + - name: static-build-linux + image: techknowlogick/xgo:latest + pull: always + 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 + commands: + - export PATH=$PATH:$GOPATH/bin + - go install github.com/magefile/mage + - ./mage-static release:linux + depends_on: [ before-static-build ] + + - name: static-build-darwin + image: techknowlogick/xgo:latest + pull: always + 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 + commands: + - export PATH=$PATH:$GOPATH/bin + - go install github.com/magefile/mage + - ./mage-static release:darwin + depends_on: [ before-static-build ] + + - name: after-build-compress + image: kolaente/upx + pull: always + depends_on: + - static-build-windows + - 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 + commands: + - go install github.com/magefile/mage + - ./mage-static release:copy + - ./mage-static release:check + - ./mage-static release:os-package + - ./mage-static release:zip + + - name: sign-release + image: plugins/gpgsign:1 + pull: always + depends_on: [ after-build-static ] + settings: + key: + from_secret: gpg_privkey + passphrase: + from_secret: gpg_password + files: + - dist/zip/* + detach_sign: true + + # Push the releases to our pseudo-s3-bucket + - name: release-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/zip/ + source: dist/zip/* + target: /api/unstable/ + when: + branch: + - main + event: + - push + depends_on: [ sign-release ] + + - name: release-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/zip/ + source: dist/zip/* + target: /api/${DRONE_TAG##v}/ + when: + event: + - tag + depends_on: [ sign-release ] + + # Build os packages and push it to our bucket + - name: build-os-packages-unstable + 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-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 ] + + # 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/* + target: /api/unstable/ + when: + branch: + - 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}/ + when: + event: + - tag + depends_on: [ build-os-packages-version ] + +--- +kind: pipeline +type: docker +name: deploy-docs + +workspace: + base: /go + path: src/code.vikunja.io/api + +clone: + depth: 50 + +trigger: + event: + - push + branch: + - main + +steps: + - name: theme + image: kolaente/toolbox + pull: always + commands: + - mkdir docs/themes/vikunja -p + - cd docs/themes/vikunja + - wget https://dl.vikunja.io/theme/vikunja-theme.tar.gz + - tar -xzf vikunja-theme.tar.gz + + - name: build + image: klakegg/hugo:0.107.0 + pull: always + 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: always + 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-release + +depends_on: + - testing + +trigger: + ref: + - refs/heads/main + - "refs/tags/**" + +steps: + - name: fetch-tags + image: docker:git + commands: + - git fetch --tags + + - name: docker-unstable + image: thegeeklab/drone-docker-buildx + privileged: true + pull: always + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + repo: vikunja/api + tags: unstable + platforms: + - linux/386 + - linux/amd64 + - linux/arm/v6 + - linux/arm/v7 + - linux/arm64/v8 + depends_on: [ fetch-tags ] + when: + ref: + - refs/heads/main + + - name: generate-tags + image: thegeeklab/docker-autotag + environment: + DOCKER_AUTOTAG_VERSION: ${DRONE_TAG} + DOCKER_AUTOTAG_EXTRA_TAGS: latest + DOCKER_AUTOTAG_OUTPUT_FILE: .tags + depends_on: [ fetch-tags ] + when: + ref: + - "refs/tags/**" + + - name: docker-release + image: thegeeklab/drone-docker-buildx + privileged: true + pull: always + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + repo: vikunja/api + platforms: + - linux/386 + - linux/amd64 + - linux/arm/v6 + - linux/arm/v7 + - linux/arm64/v8 + depends_on: [ generate-tags ] + when: + ref: + - "refs/tags/**" + +--- +kind: pipeline +type: docker +name: notify + +trigger: + ref: + - refs/heads/main + - "refs/tags/**" + +depends_on: + - testing + - release + - deploy-docs + - docker-release + +steps: + - name: notify + image: plugins/matrix + settings: + homeserver: https://matrix.org + roomid: WqBDCxzghKcNflkErL:matrix.org + username: + from_secret: matrix_username + password: + from_secret: matrix_password + when: + status: + - success + - failure +--- +kind: signature +hmac: eb647c46cdea1a6b17149925dd43a9c180fe941ceaec9d2c6ede557b68a4dd37 + +... diff --git a/.drone1.yml b/.drone1.yml deleted file mode 100644 index a0e34bc31..000000000 --- a/.drone1.yml +++ /dev/null @@ -1,615 +0,0 @@ -kind: pipeline -name: testing - -workspace: - base: /go - path: src/code.vikunja.io/api - -services: - - name: test-mysql-unit - image: mariadb:10 - environment: - MYSQL_ROOT_PASSWORD: vikunjatest - MYSQL_DATABASE: vikunjatest - - name: test-mysql-integration - 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 - -trigger: - branch: - include: - - master - event: - include: - - push - - pull_request - -steps: - - name: fetch-tags - image: docker:git - commands: - - git fetch --tags - - - name: build - image: vikunja/golang-build:latest - pull: true - environment: - GOFLAGS: '-mod=vendor' - commands: - - make generate - - 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 - - make gocyclo-check - - make static-check - - make build - when: - event: [ push, tag, pull_request ] - - - name: test - image: vikunja/golang-build:latest - pull: true - commands: - - make test - depends_on: [ build ] - 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 test - depends_on: [ build ] - 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 - VIKUNJA_DATABASE_USER: root - VIKUNJA_DATABASE_PASSWORD: vikunjatest - VIKUNJA_DATABASE_DATABASE: vikunjatest - commands: - - make test - depends_on: [ build ] - 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 test - depends_on: [ build ] - when: - event: [ push, tag, pull_request ] - - - name: integration-test - image: vikunja/golang-build:latest - pull: true - commands: - - make integration-test - depends_on: [ build ] - 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 integration-test - depends_on: [ build ] - 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 - VIKUNJA_DATABASE_USER: root - VIKUNJA_DATABASE_PASSWORD: vikunjatest - VIKUNJA_DATABASE_DATABASE: vikunjatest - commands: - - make integration-test - depends_on: [ build ] - 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 integration-test - depends_on: [ build ] - when: - event: [ push, tag, pull_request ] - ---- -######## -# Build a release when pushing to master -# We need to copy this because drone currently can't run a pipeline on either a push to master or a tag. -######## - -kind: pipeline -name: deploy-master -depends_on: - - testing - -workspace: - base: /go - path: src/code.vikunja.io/api - -trigger: - branch: - - master - event: - - push - -steps: - # Needed to get the versions right as they depend on tags - - name: fetch-tags - image: docker:git - commands: - - git fetch --tags - - - name: before-static-build - image: techknowlogick/xgo:latest - pull: true - commands: - - export PATH=$PATH:$GOPATH/bin - - make generate - - make release-dirs - depends_on: [ fetch-tags ] - - - name: static-build-windows - image: techknowlogick/xgo:latest - 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 - commands: - - export PATH=$PATH:$GOPATH/bin - - make release-windows - depends_on: [ before-static-build ] - - - name: static-build-linux - image: techknowlogick/xgo:latest - 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 - commands: - - export PATH=$PATH:$GOPATH/bin - - make release-linux - depends_on: [ before-static-build ] - - - name: static-build-darwin - image: techknowlogick/xgo:latest - 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 - commands: - - export PATH=$PATH:$GOPATH/bin - - make release-darwin - depends_on: [ before-static-build ] - - - name: after-build-compress - image: kolaente/upx - pull: true - depends_on: - - static-build-windows - - 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 - commands: - - make release-copy - - make release-check - - make release-os-package - - make release-zip - - - name: sign-release - image: plugins/gpgsign:1 - pull: true - depends_on: [ after-build-static ] - settings: - key: - from_secret: gpg_privkey - passphrase: - from_secret: gpg_password - files: - - dist/zip/* - detach_sign: true - -# Push the releases to our pseudo-s3-bucket - - name: release-latest - 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/* - target: /api/master/ - depends_on: [ sign-release ] - - # 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: - 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: debian - source: debian/*/*/*/*/* - target: /deb/ - depends_on: [ deb-structure ] - -# Build the docker image and push it to docker hub - - name: docker - image: plugins/docker - pull: true - settings: - username: - from_secret: docker_username - password: - from_secret: docker_password - repo: vikunja/api - auto_tag: true - depends_on: [ fetch-tags ] - - - name: telegram - image: appleboy/drone-telegram - depends_on: - - release-latest - 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 ---- -######## -# Build a release when tagging -# We need to copy this because drone currently can't run a pipeline on either a push to master or a tag. -######## - -kind: pipeline -name: deploy-version -depends_on: - - testing - -workspace: - base: /go - path: src/code.vikunja.io/api - -trigger: - event: - - tag - -steps: - - name: fetch-tags - image: docker:git - commands: - - git fetch --tags - - - name: before-static-build - image: techknowlogick/xgo:latest - pull: true - commands: - - make generate - - make release-dirs - depends_on: [ fetch-tags ] - - - name: static-build-windows - image: techknowlogick/xgo:latest - 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 - commands: - - export PATH=$PATH:$GOPATH/bin - - make release-windows - depends_on: [ before-static-build ] - - - name: static-build-linux - image: techknowlogick/xgo:latest - 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 - commands: - - export PATH=$PATH:$GOPATH/bin - - make release-linux - depends_on: [ before-static-build ] - - - name: static-build-darwin - image: techknowlogick/xgo:latest - 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 - commands: - - export PATH=$PATH:$GOPATH/bin - - make release-darwin - depends_on: [ before-static-build ] - - - name: after-build-compress - image: kolaente/upx - pull: true - depends_on: - - static-build-windows - - 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 - commands: - - make release-copy - - make release-check - - make release-os-package - - make release-zip - - - name: sign-release - image: plugins/gpgsign:1 - pull: true - depends_on: [ after-build-static ] - settings: - key: - from_secret: gpg_privkey - passphrase: - from_secret: gpg_password - files: - - dist/zip/* - detach_sign: true - -# Push the releases to our pseudo-s3-bucket - - name: release-version - 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/* - target: /api/${DRONE_TAG##v}/ - depends_on: [ sign-release ] - - # 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: - 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: debian - source: debian/*/*/*/*/* - target: /deb/ - depends_on: [ deb-structure ] - -# Build the docker image and push it to docker hub - - name: docker - image: plugins/docker - pull: true - settings: - username: - from_secret: docker_username - password: - from_secret: docker_password - repo: vikunja/api - auto_tag: true - depends_on: [ fetch-tags ] - - - name: telegram - image: appleboy/drone-telegram - depends_on: - - docker - - release-version - 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 - ---- -kind: pipeline -name: deploy-docs - -workspace: - base: /go - 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 - - - name: theme - image: kolaente/yarn - pull: true - group: build-static - commands: - - cd docs/themes/vikunja - - yarn --production=false - - ./node_modules/.bin/gulp - - - 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 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..8e994f3ca --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false + +[*.go] +indent_style = tab + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 4 \ No newline at end of file diff --git a/.gitea/pull_request_template.md b/.gitea/pull_request_template.md deleted file mode 100644 index bdb0e2339..000000000 --- a/.gitea/pull_request_template.md +++ /dev/null @@ -1,12 +0,0 @@ -# Description - - - -# Checklist - -* [ ] I added or improved tests -* [ ] I pushed new or updated dependencies to the repo using `go mod vendor` -* [ ] I added or improved docs for my feature - * [ ] Swagger (including `make do-the-swag`) - * [ ] Error codes - * [ ] New config options \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..e9715a058 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +github: kolaente +open_collective: vikunja +custom: ["https://vikunja.cloud", "https://www.buymeacoffee.com/kolaente"] diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 000000000..ff6a0a9e5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,58 @@ +name: Bug Report +description: Found something you weren't expecting? Report it here! +labels: kind/bug +body: + - type: markdown + attributes: + value: | + NOTE: If your issue is a security concern, please send an email to security@vikunja.io instead of opening a public issue. + - type: markdown + attributes: + value: | + Please fill out this issue template to report a bug. + + 1. If you want to propose a new feature, please open a discussion thread in the forum: https://community.vikunja.io + 2. Please ask questions or configuration/deploy problems on our [Matrix Room](https://matrix.to/#/#vikunja:matrix.org) or forum (https://community.vikunja.io). + 3. Make sure you are using the latest release and + take a moment to check that your issue hasn't been reported before. + 4. Please give all relevant information below for bug reports, because + incomplete details will be handled as an invalid report and closed. + - type: textarea + id: description + attributes: + label: Description + description: | + Please provide a description of your issue here, with a URL if you were able to reproduce the issue (see below). + - type: input + id: frontend-version + attributes: + label: Vikunja Frontend Version + description: Vikunja frontend version (or commit reference) of your instance + validations: + required: true + - type: input + id: api-version + attributes: + label: Vikunja API Version + description: Vikunja API version (or commit reference) of your instance + validations: + required: true + - type: input + id: browser-version + attributes: + label: Browser and version + description: If your issue is related to a frontend problem, please provide the browser and version you used to reproduce it. + - type: dropdown + id: can-reproduce + attributes: + label: Can you reproduce the bug on the Vikunja demo site? + options: + - "Yes" + - "No" + validations: + required: true + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: If this issue involves the Web Interface, please provide one or more screenshots diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..56fb2b23e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,17 @@ +blank_issues_enabled: false +contact_links: + - name: Frontend issues + url: https://code.vikunja.io/frontend/issues + about: This is the API repo. Please open frontend-related bug reports and discussions in the frontend repo. Not sure if you issue is frontend or api? Ask in Matrix or the forum first. + - name: Forum + url: https://community.vikunja.io/ + about: Feature Requests, Questions, configuration or deployment problems should be discussed in the forum. + - name: Security-related issues + url: https://vikunja.io/contact/#security + about: For security concerns, please send a mail to security@vikunja.io instead of opening a public issue. + - name: Chat on Matrix + url: https://matrix.to/#/#vikunja:matrix.org + about: Please ask any quick questions here. + - name: Translations + url: https://crowdin.com/project/vikunja + about: Any problems or requests for new languages about translations should be handled in crowdin. diff --git a/.gitignore b/.gitignore index 5d2d20e22..6fcf2c8a4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ config.yml config.yaml !docs/config.yml +!.github/ISSUE_TEMPLATE/config.yml +!.gitea/ISSUE_TEMPLATE/config.yml +docs/themes/ *.db Run dist/ @@ -20,3 +23,8 @@ docs/resources/ pkg/static/templates_vfsdata.go files/ !pkg/files/ +vikunja-dump* +vendor/ +os-packages/ +mage_output_file.go +pkg/swagger/* diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 9389d5874..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "docs/themes/vikunja"] - path = docs/themes/vikunja - url = ../theme.git diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..1f3586d04 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,96 @@ +run: + timeout: 15m + tests: true + +linters: + enable: + - megacheck + - govet + - goconst + - gocritic + - gocyclo + - goerr113 + - goheader + - gofmt + - goimports + - revive + - misspell + disable: + - scopelint # Obsolete, using exportloopref instead + - durationcheck + presets: + - bugs + - unused + fast: false + +linters-settings: + nestif: + min-complexity: 6 + goheader: + template-path: code-header-template.txt + +issues: + exclude-rules: + # Exclude some linters from running on tests files. + - path: _test\.go + linters: + - gocyclo + - deadcode + - errorlint + - path: pkg/integrations/* + linters: + - gocyclo + - deadcode + - varcheck + - unparam + - bodyclose + - path: pkg/integrations/* + text: "unlambda" + linters: + - gocritic + - path: pkg/modules/background/unsplash/unsplash\.go + linters: + - bodyclose + - path: pkg/migration/* + linters: + - exhaustive + - goconst + - goerr113 + - path: pkg/models/task_collection_filter\.go + linters: + - exhaustive + - path: pkg/utils/random_string\.go + text: "G404:" # We don't care about cryptographically secure randomness when we're using that utility function. + linters: + - gosec + - path: pkg/modules/dump/* + linters: + - goerr113 + - path: pkg/ + text: "err113: do not define dynamic errors, use wrapped static errors instead:" + linters: + - goerr113 + - text: "commentFormatting: put a space between `//` and comment text" + linters: + - gocritic + - path: pkg/modules/migration + linters: + - gocyclo + - path: pkg/routes/api/v1/docs.go + linters: + - goheader + - misspell + - text: "Missed string" + linters: + - goheader + - path: pkg/.*/error.go + linters: + - errorlint + - path: pkg/models/favorites\.go + linters: + - nilerr + - path: pkg/models/project\.go + text: "string `parent_project_id` has 3 occurrences, make it a constant" + - path: pkg/models/events\.go + linters: + - musttag diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..d5177f9c1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceRoot}", + "env": {}, + "args": [] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..d4aee1e68 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "go.testEnvVars": { + "VIKUNJA_SERVICE_ROOTPATH": "${workspaceRoot}" + } +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e28dcf14..6bbc68a08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,1630 @@ All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres +to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). All releases can be found on https://code.vikunja.io/api/releases. +## [0.20.4] - 2023-03-12 + +### Bug Fixes + +* *(docker)* Allow non-unique group id + +### Documentation + +* Add link to tutorial for installing Vikunja on Synology ([4de0efe](4de0efec1dd7da95dbf936728d7e23791396a63a)) + + +## [0.20.3] - 2023-03-10 + +### Bug Fixes + +* *(build)* Downgrade xgo to 1.19.2 so that builds work again +* *(caldav)* Add Z suffix to dates make it clear dates are in UTC +* *(caldav)* Use const for repeat modes +* *(caldav)* Make sure only labels where the user has permission to use them are used +* *(ci)* Pipeline dependency +* *(ci)* Pin nfpm container version and binary location +* *(ci)* Set release path to /source +* *(ci)* Tagging logic for release docker images +* *(ci)* Save generated .tags file to correctly tag docker releases +* *(ci)* Sign drone config +* *(docd)* Update Subdirectory Documentation (#1363) +* *(docker)* Cross compilation with buildx +* *(docker)* Re-add expose +* *(docker)* Passing environment variables into the container +* *(docker)* Make sure the vikunja user always exists and only modify the uid instead of recreating the user +* *(docs)* Add docs about cli user delete +* *(docs)* Old helm charts url (#1344) +* *(docs)* Fix a few minor typos (#59) +* *(docs)* Fix traefik v2 example (#65) +* *(docs)* Clarify support for caldav reccurrence +* *(drone)* Add type, fix pull, remove group (#1355) +* *(dump)* Make sure null dates are properly set when restoring from a dump +* *(export)* Ignore file size for export files +* *(list)* Return lists for a namespace id even if that namespace is deleted +* *(list)* When list background is removed, delete file from file system and DB (#1372) +* *(mailer)* Forcessl config (#60) +* *(migration)* Use Todoist v9 api to migrate tasks from them +* *(migration)* Import TickTick data by column name instead of index (#1356) +* *(migration)* Use the proper authorization method for Todoist's api, fix issues with importing deleted items +* *(migration)* Remove unused todoist parameters +* *(migration)* Todoist pagination now avoids too many loops +* *(migration)* Don't try to add nonexistent tasks as related +* *(migration)* Make sure trello checklists are properly imported +* *(reminders)* Overdue tasks join condition +* *(reminders)* Make sure an overdue reminder is sent when there is only one overdue task +* *(reminders)* Prevent duplicate reminders when updating task details +* *(restore)* Check if we're really dealing with a string +* *(task)* Make sure the task's last updated timestamp is always updated when releated entities changed +* *(task)* Correctly load tasks by id and uuid in caldav +* *(tasks)* Don't include undone overdue tasks from archived lists or namespaces in notification mails +* *(tasks)* Don't reset the kanban bucket when updating a task and not providing one +* *(tasks)* Don't set a repeating task done when moving it do the done bucket +* *(tasks)* Recalculate position of all tasks in a list or bucket when it would hit 0 +* *(tasks)* Make sure tasks are sorted by position before recalculating them +* *(user)* Make reset the user's name to empty actually work +* Swagger docs ([96b5e93](96b5e933796275e87f3007e31db0623688dbdb3a)) +* Restore notifications table from dump when it already had the correct format ([8c67be5](8c67be558f697ab52740c51ab453092c0f8f7c14)) +* Make sure labels are always exported as caldav (#1412) ([1afc72e](1afc72e1906c02b093bb6d9748235b93ab0eb181)) +* Lint ([491a142](491a1423788b76f236d070071cb46f5b2f5d3fd0)) +* Lint ([20a5994](20a5994b1717e7751750f14a9a164825a8e6ade6)) +* Lint ([077baba](077baba2eaff2f10b97384f07375ece7f51ec0fa)) +* Lint ([9f14466](9f14466dfa8660362a4e51b3c8c6810bf8d66a22)) + + +### Dependencies + +* *(deps)* Update module github.com/yuin/goldmark to v1.5.3 (#1317) +* *(deps)* Update module golang.org/x/crypto to v0.2.0 (#1315) +* *(deps)* Update module github.com/spf13/afero to v1.9.3 (#1320) +* *(deps)* Update module golang.org/x/crypto to v0.3.0 (#1321) +* *(deps)* Update github.com/arran4/golang-ical digest to a677353 (#1323) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.5 (#1325) +* *(deps)* Update github.com/arran4/golang-ical digest to 1093469 (#1326) +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.4.3 (#1328) +* *(deps)* Update module github.com/go-sql-driver/mysql to v1.7.0 (#1332) +* *(deps)* Update module golang.org/x/sys to v0.3.0 (#1333) +* *(deps)* Update module golang.org/x/term to v0.3.0 (#1336) +* *(deps)* Update module golang.org/x/image to v0.2.0 (#1335) +* *(deps)* Update module golang.org/x/oauth2 to v0.2.0 (#1316) +* *(deps)* Update module golang.org/x/oauth2 to v0.3.0 (#1337) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.16.0 (#1338) +* *(deps)* Update module golang.org/x/crypto to v0.4.0 (#1339) +* *(deps)* Update module github.com/pquerna/otp to v1.4.0 (#1341) +* *(deps)* Update module github.com/swaggo/swag to v1.8.9 (#1327) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.6 (#1342) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.10.0 (#1343) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.7 (#1348) +* *(deps)* Update module github.com/coreos/go-oidc/v3 to v3.5.0 (#1349) +* *(deps)* Update module golang.org/x/sys to v0.4.0 (#1351) +* *(deps)* Update module golang.org/x/image to v0.3.0 (#1350) +* *(deps)* Update module golang.org/x/term to v0.4.0 (#1352) +* *(deps)* Update module golang.org/x/crypto to v0.5.0 (#1353) +* *(deps)* Update goreleaser/nfpm docker tag to v2.23.0 (#1347) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.8 (#1357) +* *(deps)* Update module src.techknowlogick.com/xgo to v1.6.0+1.19.5 (#1358) +* *(deps)* Update klakegg/hugo docker tag to v0.107.0 (#1272) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.17.0 (#1361) +* *(deps)* Update module src.techknowlogick.com/xgo to v1.7.0+1.19.5 (#1364) +* *(deps)* Update module github.com/spf13/viper to v1.15.0 (#1365) +* *(deps)* Update module github.com/labstack/echo-jwt/v4 to v4.0.1 (#1369) +* *(deps)* Update module golang.org/x/oauth2 to v0.4.0 (#1354) +* *(deps)* Update github.com/gocarina/gocsv digest to 763e25b (#1370) +* *(deps)* Update goreleaser/nfpm docker tag to v2.24.0 (#1367) +* *(deps)* Update module github.com/swaggo/swag to v1.8.10 (#1371) +* *(deps)* Update module github.com/go-redis/redis/v8 to v9 (#1377) +* *(deps)* Update module github.com/labstack/echo-jwt/v4 to v4.1.0 +* *(deps)* Update module github.com/ulule/limiter/v3 to v3.11.0 (#1378) +* *(deps)* Update module github.com/redis/go-redis/v9 to v9.0.2 +* *(deps)* Update goreleaser/nfpm docker tag to v2.25.0 (#1382) +* *(deps)* Upgrade golangci-lint to 1.51.0 +* *(deps)* Update module github.com/yuin/goldmark to v1.5.4 +* *(deps)* Update module go to 1.20 +* *(deps)* Update xgo to 1.20 +* *(deps)* Update module golang.org/x/sys to v0.5.0 +* *(deps)* Update module github.com/getsentry/sentry-go to v0.18.0 (#1386) +* *(deps)* Update module golang.org/x/term to v0.5.0 +* *(deps)* Update module golang.org/x/crypto to v0.6.0 +* *(deps)* Update module golang.org/x/oauth2 to v0.5.0 +* *(deps)* Update module golang.org/x/image to v0.4.0 +* *(deps)* Update goreleaser/nfpm docker tag to v2.26.0 (#1394) +* *(deps)* Update github.com/arran4/golang-ical digest to 07c6aad +* *(deps)* Update module github.com/threedotslabs/watermill to v1.2.0 (#1384) +* *(deps)* Update module golang.org/x/image to v0.5.0 (#1396) +* *(deps)* Update golang.org/x/net to 0.7.0 +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.5.0 (#1399) +* *(deps)* Update github.com/gocarina/gocsv digest to bcce7dc +* *(deps)* Update golangci-lint to 1.51.2 +* *(deps)* Update module github.com/labstack/echo/v4 to v4.10.1 +* *(deps)* Update github.com/gocarina/gocsv digest to bee85ea +* *(deps)* Update module github.com/labstack/echo/v4 to v4.10.2 +* *(deps)* Update module github.com/spf13/afero to v1.9.4 +* *(deps)* Update github.com/gocarina/gocsv digest to dc4ee9d +* *(deps)* Update module github.com/stretchr/testify to v1.8.2 +* *(deps)* Update github.com/gocarina/gocsv digest to 70c27cb +* *(deps)* Update module golang.org/x/sys to v0.6.0 +* *(deps)* Update module golang.org/x/term to v0.6.0 +* *(deps)* Update module golang.org/x/crypto to v0.7.0 +* *(deps)* Update module golang.org/x/oauth2 to v0.6.0 +* *(deps)* Update module golang.org/x/image to v0.6.0 +* *(deps)* Update github.com/kolaente/caldav-go digest to 2a4eb8b +* *(deps)* Remove fsnotify replacement +* *(deps)* Update github.com/vectordotdev/go-datemath digest to f3954d0 +* *(deps)* Update src.techknowlogick.com/xgo digest to 44f7e66 +* *(deps)* Update module github.com/getsentry/sentry-go to v0.19.0 +* *(deps)* Update module github.com/spf13/afero to v1.9.5 +* *(deps)* Update module github.com/ulule/limiter/v3 to v3.11.1 +* *(deps)* Update src.techknowlogick.com/xgo digest to b607086 +* *(deps)* Update module github.com/gabriel-vasile/mimetype to v1.4.2 + +### Features + +* *(background)* Add Last-Modified header (#1376) +* *(caldav)* Add support for repeating tasks +* *(caldav)* Export Labels to CalDAV (#1409) +* *(caldav)* Import caldav categories as Labels (#1413) +* *(migrators)* Remove wunderlist (#1346) +* *(release)* Use compressed binaries for package releases +* Use docker buildx to build multiarch images ([a6e214b](a6e214b654f28836cc8b93683dbfd5999282d11c)) +* Provide logout url for openid providers (#1340) ([a79b1de](a79b1de2d0247a424f49cecaa267d30e8fa70a83)) +* Refactored Dockerfile (#1375) ([522bf7d](522bf7d2fc3cc1704f58299b6435baccc7add533)) +* Disable events log by default ([da9d25c](da9d25cf727c56acd7394b4b74e17a2959ee5242)) + - **BREAKING**: events log level is now off unless explicitly enabled + + +### Miscellaneous Tasks + +* *(docs)* Adjust docs about frontend docker container +* *(docs)* Remove sponsors +* *(task)* Add test to check if a task's reminders are duplicated +* Remove custom gitea bug template in favor of githubs ([4fa45bf](4fa45bf9dcbaa8a41a53fc2305c4c2c1aa15691c)) +* 0.20.2 release preperations ([d19fc80](d19fc80b8be08673136d84e10187cadb293822bf)) +* Update funding links ([aa25ccd](aa25ccdc917684583a9bff4b7cb272004386f0fa)) + + +### Other + +* *(other)* Added Google & Google Workspace to OpenId examples (#1319) + + +## [0.20.2] - 2023-01-24 + +### Bug Fixes + +* *(build)* Downgrade xgo to 1.19.2 so that builds work again +* *(caldav)* Add Z suffix to dates make it clear dates are in UTC +* *(caldav)* Use const for repeat modes +* *(ci)* Pipeline dependency +* *(ci)* Pin nfpm container version and binary location +* *(ci)* Set release path to /source +* *(ci)* Tagging logic for release docker images +* *(docs)* Add docs about cli user delete +* *(docs)* Old helm charts url (#1344) +* *(docs)* Fix a few minor typos (#59) +* *(drone)* Add type, fix pull, remove group (#1355) +* *(dump)* Make sure null dates are properly set when restoring from a dump +* *(export)* Ignore file size for export files +* *(list)* Return lists for a namespace id even if that namespace is deleted +* *(mailer)* Forcessl config (#60) +* *(migration)* Use Todoist v9 api to migrate tasks from them +* *(migration)* Import TickTick data by column name instead of index (#1356) +* *(migration)* Use the proper authorization method for Todoist's api, fix issues with importing deleted items +* *(reminders)* Overdue tasks join condition +* *(reminders)* Make sure an overdue reminder is sent when there is only one overdue task +* *(reminders)* Prevent duplicate reminders when updating task details +* *(restore)* Check if we're really dealing with a string +* *(tasks)* Don't include undone overdue tasks from archived lists or namespaces in notification mails +* *(tasks)* Don't reset the kanban bucket when updating a task and not providing one +* *(tasks)* Don't set a repeating task done when moving it do the done bucket +* *(user)* Make reset the user's name to empty actually work* Swagger docs ([41c9e3f](41c9e3f9a47280887b56941280904aea6ef31f85)) +* Restore notifications table from dump when it already had the correct format ([15811fd](15811fd4d4485cd25cf8d2f8fdd04ebfea8e6663)) + + +### Dependencies + +* *(deps)* Update module github.com/yuin/goldmark to v1.5.3 (#1317) +* *(deps)* Update module golang.org/x/crypto to v0.2.0 (#1315) +* *(deps)* Update module github.com/spf13/afero to v1.9.3 (#1320) +* *(deps)* Update module golang.org/x/crypto to v0.3.0 (#1321) +* *(deps)* Update github.com/arran4/golang-ical digest to a677353 (#1323) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.5 (#1325) +* *(deps)* Update github.com/arran4/golang-ical digest to 1093469 (#1326) +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.4.3 (#1328) +* *(deps)* Update module github.com/go-sql-driver/mysql to v1.7.0 (#1332) +* *(deps)* Update module golang.org/x/sys to v0.3.0 (#1333) +* *(deps)* Update module golang.org/x/term to v0.3.0 (#1336) +* *(deps)* Update module golang.org/x/image to v0.2.0 (#1335) +* *(deps)* Update module golang.org/x/oauth2 to v0.2.0 (#1316) +* *(deps)* Update module golang.org/x/oauth2 to v0.3.0 (#1337) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.16.0 (#1338) +* *(deps)* Update module golang.org/x/crypto to v0.4.0 (#1339) +* *(deps)* Update module github.com/pquerna/otp to v1.4.0 (#1341) +* *(deps)* Update module github.com/swaggo/swag to v1.8.9 (#1327) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.6 (#1342) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.10.0 (#1343) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.7 (#1348) +* *(deps)* Update module github.com/coreos/go-oidc/v3 to v3.5.0 (#1349) +* *(deps)* Update module golang.org/x/sys to v0.4.0 (#1351) +* *(deps)* Update module golang.org/x/image to v0.3.0 (#1350) +* *(deps)* Update module golang.org/x/term to v0.4.0 (#1352) +* *(deps)* Update module golang.org/x/crypto to v0.5.0 (#1353) +* *(deps)* Update goreleaser/nfpm docker tag to v2.23.0 (#1347) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.8 (#1357) +* *(deps)* Update module src.techknowlogick.com/xgo to v1.6.0+1.19.5 (#1358) +* *(deps)* Update klakegg/hugo docker tag to v0.107.0 (#1272) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.17.0 (#1361) +* *(deps)* Update module src.techknowlogick.com/xgo to v1.7.0+1.19.5 (#1364) +* *(deps)* Update module github.com/spf13/viper to v1.15.0 (#1365) +* *(deps)* Update module github.com/labstack/echo-jwt/v4 to v4.0.1 (#1369) + +### Features + +* *(migrators)* Remove wunderlist (#1346) +* *(release)* Use compressed binaries for package releases +* Use docker buildx to build multiarch images ([9bd6795](9bd6795266fd54ae42664c20ed7633ac7daf6199)) + +### Miscellaneous Tasks + +* Remove custom gitea bug template in favor of githubs ([7b1e1c7](7b1e1c79e358f3fcecb217259491f016402cdcc7)) + +### Other + +* *(other)* Added Google & Google Workspace to OpenId examples (#1319) + +## [0.20.1] - 2022-11-11 + +### Bug Fixes + +* *(docs)* Add explanation on how to run the cli in docker +* *(filter)* Also check for 0 values if the filter should include nulls +* *(filter)* Only check for 0 values in filter fields with numeric values +* *(filters)* Try to parse date filter fields of the provided dates are not valid iso dates +* *(filters)* Try parsing dates without time +* *(filters)* Try parsing invalid dates like 2022-11-1 +* *(metrics)* Make currently active users actually work +* *(task)* Duplicate reminders when adding different ones between winter / summer time +* *(tasks)* Allow sorting by task index* Make sure task indexes are calculated correctly when moving tasks between lists ([c495096](c4950964443a9bffc4cdd8fc25004ad951520f20)) +* Look for the default bucket based on the position instead of the index ([622f2f0](622f2f0562bd8e3a5c97ec0b001c646a33a86c2b)) +* Usage with postgres over unix socket (#1308) ([641a9da](641a9da93d24a18d6cbad2929eea1be6c1e0d0b2)) + +### Dependencies + +* *(deps)* Update module github.com/prometheus/client_golang to v1.13.1 (#1307) +* *(deps)* Update module github.com/spf13/viper to v1.14.0 (#1309) +* *(deps)* Update module golang.org/x/sys to v0.2.0 (#1311) +* *(deps)* Update module golang.org/x/term to v0.2.0 (#1312) +* *(deps)* Update module github.com/prometheus/client_golang to v1.14.0 (#1313) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.15.0 (#1314) + +### Features + +* *(docs)* Add relase checklist + +### Other + +* *(other)* Nessecary is a common misspelling of necessary (#1304) + +## [0.20.0] - 2022-10-28 + +### Bug Fixes + +* *(caldav)* Make sure duration and due date follow rfc5545 +* *(caldav)* No failed login emails for tokens (#1252) +* *(ci)* Make sure release zip files have a .zip ending +* *(ci)* Make sure release os packages are properly named +* *(docs)* Clarify using port 25 as mail port when mail does not work +* *(docs)* Document pnpm instead of yarn +* *(docs)* Fix redirect_url example (#50) +* *(lists)* Return correct max right for lists where the user has created the namespace +* *(mail)* Pass mail server timeout (#1253) +* *(migration)* Properly parse duration +* *(migration)* Expose ticktick migrator to /info +* *(migration)* Make sure importing works when the csv file has errors and don't try to parse empty values as dates +* *(namespaces)* Add list subscriptions (#1254) +* *(todoist)* Properly import all done tasks* Properly log extra message ([c194797](c19479757a20d72484b4e071b45055746ff2b67e)) +* Don't try to compress riscv64 binaries in releases ([d8f387f](d8f387f7967ffb94035de2fcfc4578247ae1023e)) +* Preserve dates for repeating tasks (#47) ([090c671](090c67138a16258480b866b05c6fdc2e02d12c89)) +* Tasks with the same assignee as doer should not appear twice in overdue task mails ([45defeb](45defebcf435cade4b72763236e1e2dfdac770cc)) +* Don't allow setting a list namespace to 0 ([96ed1e3](96ed1e33e38beec1bb1ab0813074b035dd02fade)) +* Make sure pseudo namespaces and lists always have the current user as owner ([878d19b](878d19beb81869392e33a8ffc1ec247d1cf1e4d6)) +* Use connection string for postgres ([fcb205a](fcb205a842a4e828e6e933339b23f5aa8b297125)) +* Make sure user searches are always case-insensitive ([c076f73](c076f73a87bc9b39b17389e25d0186ab71aa24bf)) +* Make cover image id actually updatable ([0e1904d](0e1904d50b8576a2e9ea5812314aa3c8f304edb5)) +* Make cover image id actually updatable ([0eb4709](0eb47096db02ceb5032c7439b3b901fbadd0d1bb)) +* Make sure a user can only be assigned once to a task ([008908e](008908eb49eeb50a554c416422feb3b465efa165)) +* Make sure list subscriptions are set correctly when their namespace has a subscription already ([2fc690a](2fc690a783f5b702fad71da627aa616017727f56)) + + +### Dependencies + +* *(deps)* Update klakegg/hugo docker tag to v0.101.0 +* *(deps)* Update golang.org/x/sync digest to 8fcdb60 +* *(deps)* Update golang.org/x/oauth2 digest to f213421 +* *(deps)* Update module src.techknowlogick.com/xgo to v1.5.0+1.19 +* *(deps)* Update module github.com/coreos/go-oidc/v3 to v3.4.0 +* *(deps)* Update golang.org/x/image digest to e7cb969 +* *(deps)* Update golang.org/x/term digest to 7a66f97 +* *(deps)* Update module github.com/lib/pq to v1.10.7 +* *(deps)* Update module github.com/spf13/viper to v1.13.0 (#1260) +* *(deps)* Update dependency golang to v1.19 (#1228) +* *(deps)* Update module github.com/wneessen/go-mail to v0.2.8 (#1258) +* *(deps)* Update module github.com/yuin/goldmark to v1.5.2 (#1261) +* *(deps)* Update module src.techknowlogick.com/xormigrate to v1.5.0 (#1262) +* *(deps)* Update module github.com/magefile/mage to v1.14.0 (#1259) +* *(deps)* Update module github.com/swaggo/swag to v1.8.6 (#1243) +* *(deps)* Update module github.com/wneessen/go-mail to v0.2.9 (#1264) +* *(deps)* Update dependency klakegg/hugo to v0.102.3 (#1265) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.14.0 (#1266) +* *(deps)* Update module github.com/labstack/gommon to v0.4.0 (#1269) +* *(deps)* Update golang.org/x/crypto digest to 4161e89 (#1268) +* *(deps)* Update golang.org/x/oauth2 digest to b44042a (#1270) +* *(deps)* Update golang.org/x/sys digest to 84dc82d (#1271) +* *(deps)* Update dependency klakegg/hugo to v0.104.2 (#1267) +* *(deps)* Update golang.org/x/crypto digest to d6f0a8c (#1275) +* *(deps)* Update golang.org/x/sys digest to 090e330 (#1276) +* *(deps)* Update module github.com/spf13/cobra to v1.6.0 (#1277) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.0 (#1278) +* *(deps)* Update golang.org/x/crypto digest to 56aed06 (#1280) +* *(deps)* Update golang.org/x/text to v0.3.8 +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.1 (#1281) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.9.1 (#1282) +* *(deps)* Update golang.org/x/sys digest to 95e765b (#1283) +* *(deps)* Update golang.org/x/oauth2 digest to 6fdb5e3 (#1284) +* *(deps)* Update golang.org/x/image digest to ffcb3fe (#1288) +* *(deps)* Update module golang.org/x/sync to v0.1.0 (#1291) +* *(deps)* Update module github.com/swaggo/swag to v1.8.7 (#1290) +* *(deps)* Update golang.org/x/term digest to 8365914 (#1289) +* *(deps)* Update module github.com/coreos/go-systemd/v22 to v22.4.0 (#1287) +* *(deps)* Update module golang.org/x/oauth2 to v0.1.0 (#1296) +* *(deps)* Update module golang.org/x/crypto to v0.1.0 (#1295) +* *(deps)* Update module golang.org/x/image to v0.1.0 (#1293) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.2 (#1297) +* *(deps)* Update module github.com/stretchr/testify to v1.8.1 (#1298) +* *(deps)* Update module github.com/spf13/cobra to v1.6.1 (#1299) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.3 (#1300) +* *(deps)* Update module github.com/wneessen/go-mail to v0.3.4 (#1302) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.16 (#1301) + +### Features + +* *(docs)* Add docs about how to deploy Vikunja in a subdirectory +* *(docs)* Document pnpm (#1251) +* *(migration)* Add TickTick migrator +* *(migration)* Add routes for TickTick migrator +* *(migration)* Generate swagger docs +* *(task)* Add cover image attachment id property +* *(task)* Add cover image attachment id property (#1263)* Add sponsor to readme (relm) ([f814dd0](f814dd03eb7f1ae08ea67ae0e3e89b8b4e684ce3)) +* Upgrade xorm ([b1fd13b](b1fd13bbcbc551d1bbfe78d91fe6209369709df5)) +* Upgrade xorm ([4323803](4323803fd6801e21121eac0d9f9cd62879f090f7)) +* Upgrade xorm (#1197) ([5341918](53419180be386d675b4513e7ec70aca85b5ac99b)) +* Add github issue templates ([9c4bb5a](9c4bb5a24429dec686e3ccdcd2b920ce5528031c)) +* Remove gitea issue template so that only the form is used ([ce621ee](ce621ee5d6b47a0776628073bbd53312a97d116b)) +* Add gitea issue template ([0612f4d](0612f4d0e03fbe85018f51056c4833557e78cd3f)) +* Provide default user settings for new users via config ([5a40100](5a40100ac5be33d2cbce3c25e355d4036b9b4d3f)) +* Add proper checks and errors to see if an attachment belongs to the task it's being used as cover image in ([631a265](631a265d2de9a6196faf28574023fc3cdcc0bfc7)) +* Allow a user to remove themselves from a team ([b8769c7](b8769c746ceddc9818f91d6a8a404293ea2e837e)) +* TickTick migrator (#1273) ([df2e36c](df2e36c2a378d4bd1b81d959da180b6e9b9a37b9)) + + +### Miscellaneous Tasks + +* Upgrade echo ([86ee827](86ee8273bce36c7b4767a34e0d878d63b37ea1b4)) +* Go mod tidy ([903b8ff](903b8ff43871234f41f706d571ee2caaba5f4232)) +* Generate swagger docs ([e113fe3](e113fe34d074f698f4b0cb237821f359976daa5c)) +* Remove unused dependencies ([f5fd849](f5fd849a0b93ff3bba53ac4907bb3fb04fa8692b)) + +## [0.19.2] - 2022-08-17 + +### Bug Fixes + +* Don't fail a migration if there is no filter saved ([10ded56](10ded56f6697ef47910ec68d37f26ed47cbe9180)) +* Don't override saved filters ([beb4d07](beb4d07cf95fc25f7cc5f7471b46bdab49f95fe0)) + +## [0.19.1] - 2022-08-17 + +### Bug Fixes + +* Prevent moving a list into a pseudo namespace ([3ccc636](3ccc6365a6892f37ee54b0750a34a61e52f6dba1)) +* Make sure generating blur hashes for bmp, tiff and webp images works ([8bf0f8b](8bf0f8bb571ddff69a7142be1acaa2e4e0c38e3b)) +* Add debian-based docker image for arm 32 builds ([c9e044b](c9e044b3ad60d25e9641d22d84571a7db83a26ac)) +* Only list all users when allowed ([9ddd7f4](9ddd7f48895f508539d591aeebde450a86987024)) +* Lint ([0c8bed4](0c8bed4054649de8510e5a636d1a14b65d52c402)) + +### Dependencies + +* *(deps)* Update golang.org/x/sys digest to 6e608f9 (#1229) +* *(deps)* Update golang.org/x/sync digest to 886fb93 (#1221) +* *(deps)* Update golang.org/x/sys digest to 8e32c04 (#1230) +* *(deps)* Update golang.org/x/term digest to a9ba230 (#1222) +* *(deps)* Update module github.com/prometheus/client_golang to v1.13.0 +* *(deps)* Update module github.com/prometheus/client_golang to v1.13.0 (#1231) +* *(deps)* Update golang.org/x/sys digest to 1c4a2a7 +* *(deps)* Update golang.org/x/oauth2 digest to 128564f (#1220) +* *(deps)* Update golang.org/x/image digest to 062f8c9 (#1219) +* *(deps)* Update golang.org/x/crypto digest to 630584e (#1218) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.8.0 (#1233) +* *(deps)* Update golang.org/x/sys digest to fbc7d0a (#1234) +* *(deps)* Update module github.com/wneessen/go-mail to v0.2.6 (#1235) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.15 (#1238) + +### Features + +* *(docs)* Add k8s docs* Add openid examples ([dbb0f54](dbb0f5473269fb29c4a484cd233a5b76484c4ca7)) +* Search by assignee username instead of id ([7f28865](7f28865903740d6dde15ee005323fbdee3072166)) +* Add migration to change user ids to usernames in saved filters ([3047ccf](3047ccfd4af8fee55d9ebff49138911ab80cb3d2)) + +## [0.19.0] - 2022-08-03 + +### Bug Fixes + +* *(caldav)* Make sure the caldav tokens of non-local accounts are properly checked +* *(caldav)* Properly parse durations when returning VTODOs +* *(caldav)* Make sure description is parsed correctly when multiline +* *(ci)* Sign drone config +* *(ci)* Make sure the linter actually runs +* *(ci)* Install git in lint step +* *(docker)* Switch to debian base image +* *(docker)* Use official go image instead of our own to build +* *(docs)* Update minimum required go version +* *(docs)* Use up-to-date hugo image for building +* *(docs)* Don't use cannonify url +* *(docs)* Image urls in synology setup explanation +* *(docs)* Clarify frontend requirements to use Vikunja +* *(dump)* Don't try to save a config file if none was provided and dump vikunja env variables +* *(mage)* Handle different types of errors +* *(mail)* Don't set a username by default +* *(mail)* Don't try to authenticate against the mail server when no credentials are provided +* *(mail)* Set server name in tls config so that sending mail works with skipTlsVerify set to false +* *(restore)* Properly decode notifications json data +* *(restore)* Make sure to reset sequences after importing a dump when using postgres +* *(restore)* Use the correct initial migration* Generate swagger docs ([4de8ec5](4de8ec56a62caef22c2061376383de1fe53ca4c3)) +* Make sure the full task is available in notifications ([c2b6119](c2b6119434e6e806785d2c259c3ca3d25496ec75)) +* Don't try to load the namespace of a list if it is a shared list ([d7e47a2](d7e47a28d4bb04d4c7c3ed85a263134180da447a)) +* Correctly load and pass the user when deleting it ([50b65a5](50b65a517da6869dc6a48fec40323e254ba4c032)) +* Updating a list might remove its background ([cf05de1](cf05de19b317bd99c30de4c6a149a0d8a4ff4f49)) +* Sorting for saved filters ([57e5d10](57e5d10eee4c45a04e9e1aaeaf41dd44eb8ce788)) +* Importing trello attachments ([c3e0e64](c3e0e6405a634894a30dbf9c0506d1691ae4d443)) +* Lint ([0b77625](0b7762590f6a0a82090ef74e9e7e32b37142d343)) +* Deleting users with no namespaces ([f8a0a7e](f8a0a7e9539a44b2f790a08eb1b03028b56eaac3)) +* Importing tasks from todoist without a due time set ([fd0d462](fd0d462bf4dd8225c67ba34958e5148f6167d264)) +* User deletion never happens ([72d3c54](72d3c54efd3dda6ae846a069415688391cb1c9ae)) +* User deletion reminder emails counting up ([f581885](f581885e65ada15439ec02f1d18d825b03581523)) +* User not actually deleted ([70e005e](70e005e7ce5cf1dd25ec9ddfde3cfbbd258fadb6)) +* User deletion schedule ([5c88dfe](5c88dfe88eab442724f22c3b29741e78939deae2)) +* Friendly name not getting synced on first login from openid ([190a9f2](190a9f2a4c1a59bc68b839c465bb2536532c0e96)) +* Importing archived lists or namespaces ([8bb3f8d](8bb3f8d37c78dc704ff4316c750e143528151b48)) +* Lint ([a31086a](a31086a7a9ca7723f61a826bccbea125243478f1)) +* Microsoft todo migration not importing all tasks ([43f1daf](43f1daf40c388a0aa40f7fd6a8db4c78308d4efd)) +* Clarify which config file is used on startup ([44aaf0a](44aaf0a4eccebb1d1a25f5563e928bd1bb82d351)) +* Disabling logging completely now works ([22e3f24](22e3f242a396aa9cf54e9426077816f97a0da36f)) +* Restoring dumps with no config file saved in them ([8bf2254](8bf2254f4b87446ab0a39080cb0b7d32ccec7c0a)) +* Validate email address when creating a user via cli ([75f74b4](75f74b429eea7ae3a75cb10def1ca658af35086a)) +* Checking for error types ([ac6818a](ac6818a4769a162c458553944509fe64357370f9)) +* Lint ([7fa0865](7fa086518800243385d8cc4696eeea9bf093e5b3)) +* Return BlurHash in unsplash search results ([6b51fae](6b51fae0931308464038f55b25e81e68d014c49c)) +* Go mod tidy ([e19ad11](e19ad1184662dc9ac9aa89a44abdffc091e2a1b8)) +* Decoding images for blurHash generation ([d3bdafb](d3bdafb717b1ad3e2165097ef0b0c2dd47e1502e)) +* Lint ([de97fcb](de97fcbd121b1d56b74175fd79ef594ef34e71c8)) +* Broken link (#27) ([96e519e](96e519ea96c9537222d0b455037e11fbe9660c31)) +* Add more methods to figure out the current binary location ([9845fcc](9845fcc1708431f8f736d36e7e19a1067b0e0e52)) +* Set derived default values only after reading config from file or env ([f5ebada](f5ebada91351faf1e5602f0260908defaaabd810)) +* Sort tasks logically and consistent across dbms (#1177) ([e52c45d](e52c45d5aabb74ea7b472e8d5b44491cdd7e9489)) +* VIKUNJA_SERVICE_JWT_SECRET should be VIKUNJA_SERVICE_JWTSECRET (#1184) ([172a621](172a6214d7c30278017129b950339c78a6ddb7bc)) +* Add missing migration ([d837f8a](d837f8a6248b5ff2700a4bfc300d7f9d466cb918)) +* Revert renaming Attachments to Embeds everywhere ([c62e26b](c62e26b6fe9d9f362fcfb1df2d5664d7f6854c31)) +* Set the correct go version in go.mod ([bc7f6a8](bc7f6a858693b0e61fff7d03b5c2b40b6ae1a55d)) +* Go mod tidy ([7a30294](7a30294407843693f6c3a7414b3b9d7093359194)) +* Tests ([d0e09d6](d0e09d69d048e62ee7c5b666c2f56761b03e68e6)) +* Go mod tidy ([951d74b](951d74b272b1e881faa10095f47b6598bb076273)) +* Prevent logging openid provider errors twice ([25ffa1b](25ffa1bc2e2f1108f20b0336708d2410bb61c9e1)) +* Remove credential escaping for postgres connections to allow for passwords with special characters ([230478a](230478aae947c86f4c6f1f251dcb30aeb1293283)) +* Cycles in tasks array when memory caching was enabled ([f5a4c13](f5a4c136fbca6fc5770476e6de8d81173f007df2)) +* Add missing error check ([5cc4927](5cc4927b9ef97667bf763772beb36225fdbeded8)) +* Properly set tls config for mailer ([5743a4a](5743a4afe51de221beeeabe66552ae4d92eed1a6)) +* Return 9:00 as default time for reminders if none was set ([79b3167](79b31673e2a79eaa124976840e85757d2bebb887)) +* Reset id sequence when importing a dump from postgres ([0f555b7](0f555b7ec74ad493d2f70a4f4040db333943dc1c)) +* Add validation for negative repeat after values ([dd46174](dd461746a655d716ef142d96a2bcef5615de3dd9)) +* Lint ([1feb62c](1feb62cc458e939d46d16d24347557e7959ddfb9)) +* Make sure to use user discoverability settings when searching list users ([382a788](382a7884be1f37da5c8f657c4b17316d8691dd59)) +* Properly decode params in url ([8f27e7e](8f27e7e619ac73716211d838f52c73d7d97aead5)) +* Return all users on a list when no search param was provided ([c51ee94](c51ee94ad1d552d69c71adfc2180c7ad0d23235d)) +* Don't return email addresses from user search results ([3688bbd](3688bbde20e989397353ea4f7e872b00a53099c2)) +* Lint ([77fafd5](77fafd5dc32aee464961be40d5d0ccf82490d02a)) +* Increase test timeout ([26e2d0b](26e2d0bddeaea902dba055baf7a4c866a44ba7f1)) +* Switch to buster for build image ([59796fd](59796fd4905fca74d26c5541878379cda143a30e)) +* Use our own build image as base build image ([b6d7323](b6d7323cdfac958c9740feba1342114ab13a0afd)) +* Use golang build image to test migrations ([84bcdbf](84bcdbf937c3be7823fcf8d5fef52e3cbb1c9bde)) +* Switch back to alpine for everything, disable arm 32 docker builds ([7ffe9b6](7ffe9b625e441202a704db2774dd66fc38244c6d)) + + +### Dependencies + +* *(deps)* Update golang.org/x/sys commit hash to a851e7d (#972) +* *(deps)* Update golang.org/x/sys commit hash to aa78b53 (#973) +* *(deps)* Update golang.org/x/sys commit hash to 528a39c (#974) +* *(deps)* Update golang.org/x/sys commit hash to 437939a (#975) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.1 (#976) +* *(deps)* Update module github.com/coreos/go-oidc/v3 to v3.1.0 (#985) +* *(deps)* Update module github.com/spf13/viper to v1.9.0 (#987) +* *(deps)* Update golang.org/x/crypto commit hash to 089bfa5 (#979) +* *(deps)* Update golang.org/x/term commit hash to 140adaa (#983) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.6.0 (#988) +* *(deps)* Update golang.org/x/sys commit hash to b8560ed (#989) +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.1.0 (#991) +* *(deps)* Update golang.org/x/sys commit hash to 92d5a99 (#992) +* *(deps)* Update module github.com/swaggo/swag to v1.7.3 (#990) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.6.1 (#993) +* *(deps)* Update golang.org/x/sys commit hash to 1cf2251 (#994) +* *(deps)* Update golang.org/x/sys commit hash to 39ccf1d (#995) +* *(deps)* Update golang.org/x/term commit hash to 03fcf44 (#996) +* *(deps)* Update golang.org/x/oauth2 commit hash to 6b3c2da (#1000) +* *(deps)* Update golang.org/x/sys commit hash to 69063c4 (#1001) +* *(deps)* Update module github.com/gabriel-vasile/mimetype to v1.4.0 (#1004) +* *(deps)* Update postgres docker tag to v14 (#1005) +* *(deps)* Update module github.com/go-redis/redis/v8 to v8.11.4 (#1003) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.9 (#1008) +* *(deps)* Update golang.org/x/sys commit hash to 9d821ac (#1009) +* *(deps)* Update golang.org/x/sys commit hash to 0ec99a6 (#1010) +* *(deps)* Update golang.org/x/sys commit hash to 9d61738 (#1011) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.2 (#1012) +* *(deps)* Update golang.org/x/sys commit hash to 8e51046 (#1016) +* *(deps)* Update golang.org/x/sys commit hash to d6a326f (#1017) +* *(deps)* Update module github.com/swaggo/swag to v1.7.4 (#1018) +* *(deps)* Update golang.org/x/sys commit hash to 711f33c (#1019) +* *(deps)* Update golang.org/x/sys commit hash to 69cdffd (#1020) +* *(deps)* Update golang.org/x/oauth2 commit hash to ba495a6 (#1022) +* *(deps)* Update golang.org/x/image commit hash to 6944b10 (#1023) +* *(deps)* Update golang.org/x/sys commit hash to 6e78728 (#1024) +* *(deps)* Update golang.org/x/sys commit hash to b3129d9 (#1025) +* *(deps)* Update golang.org/x/sys commit hash to 611d5d6 (#1026) +* *(deps)* Update golang.org/x/sys commit hash to 39c9dd3 (#1027) +* *(deps)* Update golang.org/x/sys commit hash to a2f17f7 (#1028) +* *(deps)* Update golang.org/x/sys commit hash to 4dd7244 (#1029) +* *(deps)* Update golang.org/x/sys commit hash to ae416a5 (#1030) +* *(deps)* Update golang.org/x/sys commit hash to 7861aae (#1031) +* *(deps)* Update golang.org/x/oauth2 commit hash to d3ed0bb (#1032) +* *(deps)* Update module github.com/labstack/gommon to v0.3.1 (#1033) +* *(deps)* Update golang.org/x/sys commit hash to c75c477 (#1034) +* *(deps)* Update golang.org/x/sys commit hash to ebca88c (#1035) +* *(deps)* Update golang.org/x/sys commit hash to e0b2ad0 (#1037) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.3 (#1038) +* *(deps)* Update golang.org/x/crypto commit hash to ceb1ce7 (#1041) +* *(deps)* Update module github.com/lib/pq to v1.10.4 (#1040) +* *(deps)* Update golang.org/x/sys commit hash to 51b60fd (#1042) +* *(deps)* Update golang.org/x/sys commit hash to 99a5385 (#1043) +* *(deps)* Update golang.org/x/sys commit hash to f221eed (#1044) +* *(deps)* Update golang.org/x/sys commit hash to 0c823b9 (#1045) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.4 (#1046) +* *(deps)* Update golang.org/x/sys commit hash to 0a5406a (#1048) +* *(deps)* Update golang.org/x/crypto commit hash to b4de73f (#1047) +* *(deps)* Update module github.com/ulule/limiter/v3 to v3.9.0 (#1049) +* *(deps)* Update golang.org/x/crypto commit hash to ae814b3 (#1050) +* *(deps)* Update golang.org/x/sys commit hash to dee7805 (#1051) +* *(deps)* Update golang.org/x/sys commit hash to ef496fb (#1052) +* *(deps)* Update golang.org/x/sys commit hash to fe61309 (#1054) +* *(deps)* Update module github.com/swaggo/swag to v1.7.6 (#1055) +* *(deps)* Update golang.org/x/crypto commit hash to 5770296 (#1056) +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.2.0 (#1057) +* *(deps)* Update golang.org/x/sys commit hash to 94396e4 (#1058) +* *(deps)* Update golang.org/x/sys commit hash to 97ca703 (#1059) +* *(deps)* Update golang.org/x/crypto commit hash to 4570a08 (#1062) +* *(deps)* Update golang.org/x/sys commit hash to 798191b (#1061) +* *(deps)* Update golang.org/x/sys commit hash to af8b642 (#1063) +* *(deps)* Update module github.com/spf13/viper to v1.10.0 (#1064) +* *(deps)* Update golang.org/x/sys commit hash to 03aa0b5 (#1067) +* *(deps)* Update golang.org/x/sys commit hash to 3b038e5 (#1068) +* *(deps)* Update module github.com/spf13/cobra to v1.3.0 (#1070) +* *(deps)* Update golang.org/x/sys commit hash to 4825e8c (#1071) +* *(deps)* Update module github.com/spf13/viper to v1.10.1 (#1072) +* *(deps)* Update golang.org/x/crypto commit hash to e495a2d (#1073) +* *(deps)* Update golang.org/x/sys commit hash to 4abf325 (#1074) +* *(deps)* Update golang.org/x/sys commit hash to 1d35b9e (#1075) +* *(deps)* Update module github.com/magefile/mage to v1.12.0 (#1076) +* *(deps)* Update module github.com/magefile/mage to v1.12.1 (#1077) +* *(deps)* Update module github.com/getsentry/sentry-go to v0.12.0 (#1079) +* *(deps)* Update module github.com/swaggo/swag to v1.7.8 (#1080) +* *(deps)* Update module github.com/spf13/afero to v1.7.0 (#1078) +* *(deps)* Update module github.com/spf13/afero to v1.7.1 (#1081) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.10 (#1082) +* *(deps)* Update module github.com/spf13/afero to v1.8.0 (#1083) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.6.2 (#1084) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.6.3 (#1089) +* *(deps)* Update golang.org/x/sys commit hash to a018aaa (#1088) +* *(deps)* Update golang.org/x/sys commit hash to 5a964db (#1090) +* *(deps)* Update golang.org/x/crypto commit hash to 5e0467b (#1091) +* *(deps)* Update golang.org/x/sys commit hash to da31bd3 (#1093) +* *(deps)* Update module github.com/prometheus/client_golang to v1.12.0 (#1094) +* *(deps)* Update golang.org/x/crypto commit hash to e04a857 (#1097) +* *(deps)* Update golang.org/x/crypto commit hash to aa10faf (#1098) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.11 (#1099) +* *(deps)* Update golang.org/x/crypto commit hash to 198e437 (#1100) +* *(deps)* Update golang.org/x/sys commit hash to 99c3d69 (#1101) +* *(deps)* Update module github.com/prometheus/client_golang to v1.12.1 (#1102) +* *(deps)* Update klakegg/hugo docker tag to v0.92.0 (#1103) +* *(deps)* Update klakegg/hugo docker tag to v0.92.1 (#1104) +* *(deps)* Update golang.org/x/crypto commit hash to 30dcbda (#1105) +* *(deps)* Update module github.com/swaggo/swag to v1.7.9 (#1106) +* *(deps)* Update golang.org/x/sys commit hash to 1c1b9b1 (#1107) +* *(deps)* Update module github.com/spf13/afero to v1.8.1 (#1108) +* *(deps)* Update golang.org/x/sys commit hash to 5739886 (#1110) +* *(deps)* Update golang.org/x/crypto commit hash to 20e1d8d (#1111) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.5 (#1112) +* *(deps)* Update golang.org/x/crypto commit hash to bba287d (#1113) +* *(deps)* Update golang.org/x/crypto commit hash to dad3315 (#1114) +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.3.0 (#1117) +* *(deps)* Update golang.org/x/sys commit hash to 3681064 (#1116) +* *(deps)* Update golang.org/x/crypto commit hash to db63837 (#1115) +* *(deps)* Update golang.org/x/crypto commit hash to f4118a5 (#1118) +* *(deps)* Update golang.org/x/crypto commit hash to 8634188 (#1121) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.6 (#1122) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.7 (#1123) +* *(deps)* Update module github.com/swaggo/swag to v1.8.0 (#1124) +* *(deps)* Update golang.org/x/sys commit hash to 0005352 (#1125) +* *(deps)* Update golang.org/x/sys commit hash to f242548 (#1126) +* *(deps)* Update klakegg/hugo docker tag to v0.92.2 (#1127) +* *(deps)* Update golang.org/x/sys commit hash to dbe011f (#1129) +* *(deps)* Update golang.org/x/sys commit hash to 95c6836 (#1130) +* *(deps)* Update golang.org/x/oauth2 commit hash to ee48083 (#1128) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.12 (#1132) +* *(deps)* Update golang.org/x/sys commit hash to 4e6760a (#1131) +* *(deps)* Update golang.org/x/image commit hash to 723b81c (#1133) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.7.0 (#1134) +* *(deps)* Update klakegg/hugo docker tag to v0.93.0 (#1135) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.8 (#1136) +* *(deps)* Update klakegg/hugo docker tag to v0.93.2 (#1137) +* *(deps)* Update golang.org/x/sys commit hash to 22a9840 (#1138) +* *(deps)* Update golang.org/x/crypto commit hash to efcb850 (#1139) +* *(deps)* Update golang.org/x/oauth2 commit hash to 6242fa9 (#1140) +* *(deps)* Update golang.org/x/sys commit hash to b874c99 (#1141) +* *(deps)* Update klakegg/hugo docker tag to v0.93.3 (#1142) +* *(deps)* Update module github.com/labstack/echo/v4 to v4.7.1 (#1146) +* *(deps)* Update module github.com/stretchr/testify to v1.7.1 (#1148) +* *(deps)* Update module github.com/swaggo/swag to v1.8.1 (#1156) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.11 (#1143) +* *(deps)* Update module github.com/spf13/cobra to v1.4.0 (#1145) +* *(deps)* Update module github.com/lib/pq to v1.10.5 (#1157) +* *(deps)* Update module github.com/spf13/viper to v1.11.0 (#1159) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.12 (#1162) +* *(deps)* Update module github.com/prometheus/client_golang to v1.12.2 (#1166) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.13 (#1165) +* *(deps)* Update module github.com/coreos/go-oidc/v3 to v3.2.0 (#1164) +* *(deps)* Update module github.com/swaggo/swag to v1.8.2 (#1167) +* *(deps)* Update module github.com/lib/pq to v1.10.6 (#1169) +* *(deps)* Update module gopkg.in/yaml.v3 to v3.0.1 (#1179) +* *(deps)* Update module github.com/imdario/mergo to v0.3.13 (#1178) +* *(deps)* Update module github.com/stretchr/testify to v1.7.2 (#1182) +* *(deps)* Update module github.com/swaggo/swag to v1.8.3 (#1185) +* *(deps)* Update module github.com/spf13/cobra to v1.5.0 (#1192) +* *(deps)* Update module github.com/golang-jwt/jwt/v4 to v4.4.2 (#1193) +* *(deps)* Update module github.com/stretchr/testify to v1.8.0 (#1191) +* *(deps)* Update module github.com/go-testfixtures/testfixtures/v3 to v3.8.0 (#1168) +* *(deps)* Update module github.com/mattn/go-sqlite3 to v1.14.14 (#1194) +* *(deps)* Update golang.org/x/term digest to 065cf7b (#1207) +* *(deps)* Update golang.org/x/image digest to 41969df (#1203) +* *(deps)* Update module github.com/yuin/goldmark to v1.4.13 (#1209) +* *(deps)* Update golang.org/x/crypto digest to 0559593 (#1202) +* *(deps)* Update module github.com/spf13/afero to v1.9.0 (#1210) +* *(deps)* Update module github.com/gabriel-vasile/mimetype to v1.4.1 (#1208) +* *(deps)* Update golang.org/x/sync digest to 0de741c (#1205) +* *(deps)* Update github.com/c2h5oh/datasize digest to 859f65c (#1201) +* *(deps)* Update golang.org/x/oauth2 digest to 2104d58 (#1204) +* *(deps)* Update golang.org/x/sys digest to c0bba94 (#1206) +* *(deps)* Update golang.org/x/oauth2 digest to c8730f7 (#1214) +* *(deps)* Update module github.com/spf13/afero to v1.9.2 (#1215) +* *(deps)* Update module github.com/swaggo/swag to v1.8.4 (#1216) +* *(deps)* Update module github.com/spf13/viper to v1.12.0 (#1180) +* *(deps)* Update golang.org/x/sys digest to 1609e55 (#1217) +* *(deps)* Update module github.com/go-testfixtures/testfixtures/v3 to v3.8.1 (#1226) +* *(deps)* Update module go to 1.18 (#1225) + +### Documentation +* Add docker-compose example with no proxy ([4255bc3](4255bc3a945b6fe4314e3cd3f62908dd1be1ff4a)) +* Add another youtube tutorial ([dbd6f36](dbd6f36da6e56355993cc1411379997e26c88b36)) +* Fix api url in docker examples without a proxy ([68998e9](68998e90a446569869fb150bd5fc0739f496b066)) +* Make sure all links to vikunja pages are https ([cc612d5](cc612d505f22e5d895b6ebda61fe62498634cec5)) +* Update backup instructions ([4829c89](4829c899400544ad27cacfb7d19b40988302a413)) +* Add postgres to docker-compose examples ([2aea169](2aea1691cf33b7d9e03fbe2c711af7d8f76d9724)) +* Improve development docs ([9bf32aa](9bf32aae99a7e69cce0cd4477e8fc8ddcaea25ea)) +* Add another tutorial link ([1fa74cb](1fa74cba6407c2b694b14f8439f1492476433d62)) +* Improve wording for systemd ([13561f2](13561f211493903b17c856b3010345ea9df725d4)) +* Update testing ([da318e3](da318e3db15121ba864db8450a76ba9ed18b9fd5)) +* Add guide for Synology NAS ([049ae39](049ae39c62079f77921b7a9fad5023b2c1c0c1c5)) + + +### Features + +* *(docs)* Add details of using NGINX Proxy Manager to the Reverse Proxy docs (#13) +* *(docs)* Add versions explanation +* *(mail)* Don't try to authenticate when no username and password was provided* Add better error logs for mage commands ([bb086eb](bb086eb9f87669f844c283d42ea9ca9f3f5a7877)) +* Expose if task comments are enabled or not in /info ([ae8db17](ae8db176db57fa6176e00b87924f70352332ca66)) +* Improve account deletion email grammar (#1006) ([dcb52c0](dcb52c00f1c6b3217e2b508d7799fc83adb3b055)) +* Add more debug logging when deleting users ([8f55af0](8f55af07c936218487ec94e65c6673fbddd0cdb5)) +* Don't require a password for data export from users authenticated with third-party auth ([9eca971](9eca971c938699d481915fb6e14c765aea1fa3b5)) +* Expose if a user is a local user through its jwt token ([516c812](516c812043e77be7f834ae1326d13d39e156ef77)) +* Expose if a user is a local user through the /user endpoint ([2683ef2](2683ef23d538eb846d5d799798fa82cca70dc017)) +* Enable rate limit for unauthenticated routes ([093d0c6](093d0c65ca6338358dbd1df904daadd7808f2817)) +* Use wallpaper topic for default unsplash background list ([88a2ced](88a2cede19f1844814530af948c3cc5a0b026419)) +* Gravatar - Lowercase emails before MD5 hash (#10) ([36bf3d2](36bf3d216a7be28e917e2816a9e5da43439f2c20)) +* Add marble avatar (#1060) ([73ee696](73ee696fc3cf941af2d2c2cf81224aa01f93234e)) +* Save user language in the settings ([a98119f](a98119f2d670a11efab6008129b767f9208f8113)) +* Add time zone setting for reminders (#1092) ([61d49c3](61d49c3a56a59e52ce407b858ddd4aa573dbee9d)) +* Add long-lived api tokens (#1085) ([1322cb1](1322cb16d76a40ad90631e3e091da0f0d44957a9)) +* Upgrade golangci-lint to 1.45.2 ([5cf263a](5cf263a86f954a38cbfafb6b0857bf591f82a811)) +* Add date math for filters (#1086) ([0a1d8c9](0a1d8c940410b03a78016ac6110883ca05484816)) +* Add migration to create BlurHash strings for all list backgrounds ([362706b](362706b38d52720b5a1615e185a985b7708168f7)) +* Generate a BlurHash when uploading a new image ([f83b09a](f83b09af59ed25425a16824ccf48d903c81e861a)) +* Save BlurHash from unsplash when selecting a photo from unsplash ([2ec7d7a](2ec7d7a8a85cc12c07d20cfab9b90a78a7857eb6)) +* Return BlurHash for unsplash search results ([6df8658](6df865876df961f2bec476126bf6e7fbe5d43e0e)) +* Add caldav tokens (#1065) ([e4b50e8](e4b50e84a44f809cc829c2fdb6f52b03b40a367b)) +* Ability to serve static files (#1174) ([acaa850](acaa85083f2bebbc67608ae0f454ed5e9a3ef8a0)) +* Restrict max avatar size ([2f25b48](2f25b48869f59256bf7d692c4486c64c30b85e5e)) +* Send overdue tasks email notification at 9:00 in the user's time zone ([7eb3b96](7eb3b96a4465ca6648572b07c506c06f2c28c375)) +* Add setting to change overdue tasks reminder email time ([8869adf](8869adfc276f674b686bf68f949d7efbb417e55b)) +* Allow only the authors of task comments to edit them ([01271c4](01271c4c0111b3b040dcb9a0d502d31078ad6d4b)) +* Migrate away from gomail ([30e0e98](30e0e98f7738e36698990523377f47edcbf6806c)) +* Embed the vikunja logo as inline attachment ([f4f8450](f4f8450d166f1a836eea202dd0340d2156d3dfe9)) +* Use embed fs directly to embed the logo in mails ([73c4c39](73c4c399e5d610bb713f1e9feab543e0425ee959)) +* Use actual uuids for tasks ([62325de](62325de9cd5da5b70987081956a28e7baa907081)) +* Add issue template ([117f6b3](117f6b38e1d35c09f2657975ea75dcfedcd8425d)) + + +### Miscellaneous Tasks + +* *(ci)* Use latest version of s3 plugin +* *(ci)* Sign drone config +* *(docs)* Update docs about compiling from source +* *(docs)* Redirect properly from /docs/docs +* *(docs)* Add new mailer option to docs +* *(docs)* Clarify openid setup with environment variables +* *(docs)* Add frontendurl to all example configs +* *(mage)* Don't set api packages when they are not used* Sign drone config ([1d8d0f1](1d8d0f140e4f2a59947167bd597e5f12b84b009d)) +* Cleanup namespace creation ([b60c69c](b60c69c5a8c004a780b989cf0bb8ab6455086b0f)) +* Generate swagger docs ([ba2bdff](ba2bdff39109db9ecc4b525e39e2642b41ac03b8)) +* Go mod tidy ([726a517](726a517bec731f1af8e3186e280718fef02cadf7)) +* Upgrade trello api wrapper and remove fork ([7e99618](7e99618319547c7e7dfa2cc063f654300f7074fb)) +* Use our custom build image to build docker image ([251b877](251b877015761fdd2b8dbd18cd8ec696dc374103)) +* Update golangci-lint ([430057a](430057a404b04e75c62a15693f479c6fc8e63189)) + + +### Other + +* *(other)* Healthcheck endpoint (#998) +* *(other)* Added the ability to configure the JWT expiry date using a new server.jwtttl config parameter. (#999) +* *(other)* Enable a list to be moved across namespaces (#1096) +* *(other)* A bunch of dependency updates at once (#1155) +* *(other)* Add client-cert parameters of the Go pq driver to the Vikunja config (#1161) +* *(other)* Add exec to run script to run app as PID 1 (#1200) + +## [0.18.1] - 2021-09-08 + +### Fixed + +* Docs: Add another third-party tutorial link +* Don't try to export items which do not have a parent +* fix(deps): update golang.org/x/sys commit hash to 6f6e228 (#970) +* fix(deps): update golang.org/x/sys commit hash to c212e73 (#971) +* Fix exporting tasks from archived lists +* Fix lint +* Fix tasks not exported +* Fix tmp export file created in the wrong path + +## [0.18.0] - 2021-09-05 + +### Added + +* Add default list setting (#875) +* Add menu link to Vikunja Cloud in docs +* Add more logging and better error messages for openid authentication + clarify docs +* Add more logging for test data api endpoint +* Add searching for tasks by index +* Add setting for first day of the week +* Add support of Unix socket (#912) +* Add truncate parameter to test fixtures setup +* Notify the user after three failed login attempts +* Reorder tasks, lists and kanban buckets (#923) +* Send a notification on failed TOTP +* Task mentions (#926) +* Try to get more information about the user when authenticating with openid +* User account deletion (#937) +* User Data Export and import (#967) + +### Changed + +* Allow running migration 20210711173657 multiple times to fix issues when it didn't completely run through previously +* Better logging for errors while importing a bunch of tasks +* Change task title to TEXT instead of varchar(250) to allow for longer task titles +* Disable the user account after 10 failed password attempts +* Docs: Add a note about default password +* Docs: Add another youtube tutorial +* Docs: Add ios to the list of not working caldav clients +* Docs: Add k8s-at-home Helm Chart for Vikunja +* Docs: Add other installation resources +* Docs: Add translation docs +* Docs: Fix rewrite rules in apache example configs +* Docs: Translation now happening at crowdin +* Docs: Update translation guidelines +* Don't fail when removing the last bucket in migration from other services +* Don't notify the user who created the team +* Don't use the mariadb root user in docker-compose examples +* Ensure case insensitive search on postgres (#927) +* Increase test timeout +* Only filter out failing openid providers if multiple are configured and one of them failed +* Only send an email about failed totp after three failed attempts +* Rearrange setting frontend url in config +* Refactor user email confirmation + password reset handling (#919) +* Rename and sign drone config +* Replace jwt-go with github.com/golang-jwt/jwt +* Reset failed totp attempts when logging in successfully +* Save user tokens as text and not varchar +* Save user tokens as varchar(450) and not text to fix mysql indexing issues +* Set todoist migration redirect url to the frontend url by default +* Show config full paths and env variables with config options +* Switch the :latest docker image tag to contain the latest release instead of the latest unstable +* Tune test db server settings to speed up tests (#939) + +### Fixed + +* Fix authentication callback +* Fix duplicating empty lists +* Fix error handling when deleting an attachment file +* Fix error when searching for a namespace returned no results +* Fix error when searching for a namespace with subscribers +* Fix goimports +* Fix importing archived projects and done items from todoist +* Fix jwt middleware +* Fix lint +* Fix mapping task priorities from Vikunja to calDAV +* Fix moving the done bucket around +* Fix old references to master in docs +* Fix panic on invalid smtp config +* Fix parsing openid config when using a json config file +* Fix saving pointer values to memory keyvalue +* Fix saving reminders of repeating tasks +* Fix setting a saved filter as favorite +* Fix setting task favorite status of related tasks +* Fix setting up keyvalue storage in tests +* Fix swagger docs for create requests +* Fix task relations not getting properly cleaned up when deleting them +* Fix tests & lint +* Make sure a bucket exists or use the default bucket when importing tasks +* Make sure all associated entities of a task are deleted when the task is deleted +* Make sure list / task favorites are set per user, not per entity (#915) +* Make sure the configured frontend url always has a / at the end +* Refactor & fix storing struct-values in redis keyvalue +* Todoist migration: don't panic if no reminder was found for task + +### Dependency updates + +* fix(deps): update golang.org/x/sys commit hash to 63515b4 (#959) +* fix(deps): update golang.org/x/sys commit hash to 97244b9 (#965) +* fix(deps): update golang.org/x/sys commit hash to f475640 (#962) +* fix(deps): update golang.org/x/sys commit hash to f4d4317 (#961) +* fix(deps): update module github.com/lib/pq to v1.10.3 (#963) +* Update alpine Docker tag to v3.13 (#884) +* Update alpine Docker tag to v3.14 (#889) +* Update golang.org/x/crypto commit hash to 0a44fdf (#944) +* Update golang.org/x/crypto commit hash to 0ba0e8f (#943) +* Update golang.org/x/crypto commit hash to 32db794 (#949) +* Update golang.org/x/crypto commit hash to 5ff15b2 (#891) +* Update golang.org/x/crypto commit hash to a769d52 (#916) +* Update golang.org/x/image commit hash to 775e3b0 (#880) +* Update golang.org/x/image commit hash to a66eb64 (#900) +* Update golang.org/x/image commit hash to e6eecd4 (#893) +* Update golang.org/x/net commit hash to 37e1c6af +* Update golang.org/x/oauth2 commit hash to 14747e6 (#894) +* Update golang.org/x/oauth2 commit hash to 2bc19b1 (#955) +* Update golang.org/x/oauth2 commit hash to 6f1e639 (#931) +* Update golang.org/x/oauth2 commit hash to 7df4dd6 (#952) +* Update golang.org/x/oauth2 commit hash to a41e5a7 (#902) +* Update golang.org/x/oauth2 commit hash to a8dc77f (#896) +* Update golang.org/x/oauth2 commit hash to bce0382 (#895) +* Update golang.org/x/oauth2 commit hash to d040287 (#888) +* Update golang.org/x/oauth2 commit hash to f6687ab (#862) +* Update golang.org/x/oauth2 commit hash to faf39c7 (#935) +* Update golang.org/x/sys commit hash to 00dd8d7 (#953) +* Update golang.org/x/sys commit hash to 15123e1 (#946) +* Update golang.org/x/sys commit hash to 1e6c022 (#947) +* Update golang.org/x/sys commit hash to 30e4713 (#945) +* Update golang.org/x/sys commit hash to 41cdb87 (#956) +* Update golang.org/x/sys commit hash to 7d9622a (#948) +* Update golang.org/x/sys commit hash to bfb29a6 (#951) +* Update golang.org/x/sys commit hash to d867a43 (#934) +* Update golang.org/x/sys commit hash to e5e7981 (#933) +* Update golang.org/x/sys commit hash to f52c844 (#954) +* Update golang.org/x/term commit hash to 6886f2d (#887) +* Update module getsentry/sentry-go to v0.11.0 (#869) +* Update module github.com/coreos/go-oidc to v3 (#885) +* Update module github.com/gabriel-vasile/mimetype to v1.3.1 (#904) +* Update module github.com/golang-jwt/jwt to v3.2.2 (#928) +* Update module github.com/golang-jwt/jwt to v4 (#930) +* Update module github.com/go-redis/redis/v8 to v8.11.0 (#903) +* Update module github.com/go-redis/redis/v8 to v8.11.1 (#925) +* Update module github.com/go-redis/redis/v8 to v8.11.2 (#932) +* Update module github.com/go-redis/redis/v8 to v8.11.3 (#942) +* Update module github.com/iancoleman/strcase to v0.2.0 (#918) +* Update module github.com/labstack/echo/v4 to v4.4.0 (#917) +* Update module github.com/labstack/echo/v4 to v4.5.0 (#929) +* Update module github.com/mattn/go-sqlite3 to v1.14.8 (#921) +* Update module github.com/spf13/cobra to v1.2.0 (#905) +* Update module github.com/spf13/cobra to v1.2.1 (#906) +* Update module github.com/spf13/viper to v1.8.0 (#890) +* Update module github.com/spf13/viper to v1.8.1 (#899) +* Update module github.com/swaggo/swag to v1.7.1 (#936) +* Update module github.com/yuin/goldmark to v1.3.8 (#892) +* Update module github.com/yuin/goldmark to v1.3.9 (#901) +* Update module github.com/yuin/goldmark to v1.4.0 (#908) +* Update module go-redis/redis/v8 to v8.10.0 (#882) +* Update module go-redis/redis/v8 to v8.7.1 (#807) +* Update module go-testfixtures/testfixtures/v3 to v3.6.1 (#868) +* Update module lib/pq to v1.10.2 (#865) +* Update module prometheus/client_golang to v1.11.0 (#879) +* Update module yuin/goldmark to v1.3.6 (#863) +* Update module yuin/goldmark to v1.3.7 (#867) +* Update monachus/hugo Docker tag to v0.75.1 (#940) + +## [0.17.1] - 2021-06-09 + +### Fixed + +* Fix parsing openid config when using a json config file + +## [0.17.0] - 2021-05-14 + +### Added + +* Add a "done" option to kanban buckets (#821) +* Add arm64 builds +* Add basic auth for metrics endpoint +* Add bucket limit validation +* Add crud endpoints for notifications (#801) +* Add endpoint to remove a list background +* Add events (#777) +* Add github funding link +* Add link share password authentication (#831) +* Add names for link shares (#829) +* Add notifications package for easy sending of notifications (#779) +* Add reminders for overdue tasks (#832) +* Add repeat monthly setting for tasks (#834) +* Add security information to readme +* Add separate docker manifest file for latest docker images +* Add systemd service file to linux packages +* Add test for moving a task to another list +* Enable searching users by full email or name +* Expose tls parameter of Go MySQL driver to config file (#855) +* Pagingation for tasks in kanban buckets (#805) + +### Changed + +* Change keyvalue.Get to return if a value exists or not instead of an error +* Change main branch to main +* Change test file names to unstable +* Change the name of the newly created bucket from "New Bucket" to "Backlog" +* Change unstable versions in migration tests +* Check if we're on main and change the version name accordingly if that's the case +* Cleanup listener names +* Cleanup old docs themes submodule +* Disable deb repo in drone +* Don't keep old releases from os packages when releasing for master +* Don't try to get users for tasks if no tasks were found when looking for reminders +* Explicitly add docker build step for latest +* Explicitly check if there are Ids before trying to get items by a list of Ids +* Improve duration format of overdue tasks in reminders +* Improve loading labels performance (#824) +* Improve sending overdue task reminders by only sending one for all overdue tasks +* Make sure all tables are properly pluralized +* Only send reminders for undone tasks +* Re-Enable migration test steps in pipeline +* Refactor getting all namespaces +* Remove unused tools from tools.go +* Run all lint checks at once +* Send a notification to the user when they are added to the list +* Show empty avatar when the user was not found +* Subscribe a user to a task when they are assigned to it +* Subscriptions and notifications for namespaces, tasks and lists (#786) +* Switch building the docs to download the theme instead of building +* Switch telegram notifications to matrix notifications +* Temporarily disable migration step +* Temporary build fix +* Update changelog +* Update copyright year +* Update README (#858) +* Use golang's tzdata package to handle time zones + +### Fixed + +* Explicitly set darwin-10.15 when building binaries +* Fix build +* Fix checking list rights when accessing a bucket +* Fix /dav/principals/*/ throwing a server error when accessed with GET instead of PROPFIND (#769) +* Fix deleting task relations +* Fix docs +* Fix drone file +* Fix due dates with times when migrating from todoist +* Fix event error handler retrying infinitely +* Fix filter for task index +* Fix getting lists for shared, favorite and saved lists namespace +* Fix getting user info from /user endpoint for link shares +* Fix IncrBy and DecrBy in memory keyvalue implementation if there was no value set previously +* Fix lint +* Fix matrix notify room id +* Fix moving repeating tasks to the done bucket +* Fix multiarch docker image building +* Fix not able to make saved filters favorite +* Fix notifications table not being created on initial setup +* Fix resetting the bucket limit +* Fix retrieving over openid providers if there are none +* Fix sending notifications to users if the user object didn't have an email +* Fix setting the user in created_by when uploading an attachment +* Fix shared lists showing up twice +* Fix tests +* Fix the shared lists pseudo namespace containing owned lists +* Fix unstable version build file names +* Fix user uploaded avatars +* Pin golang alpine builder image to 3.12 to fix builds on arm +* Revert "Update alpine Docker tag to v3.13 (#768)" + +### Dependency Updates + +* Update alpine Docker tag to v3.13 (#768) +* Update github.com/gordonklaus/ineffassign commit hash to 2e10b26 (#803) +* Update github.com/gordonklaus/ineffassign commit hash to d0e41b2 (#780) +* Update golang.org/x/crypto commit hash to 0c34fe9 (#822) +* Update golang.org/x/crypto commit hash to 3497b51 (#853) +* Update golang.org/x/crypto commit hash to 38f3c27 (#854) +* Update golang.org/x/crypto commit hash to 4f45737 (#836) +* Update golang.org/x/crypto commit hash to 513c2a4 (#817) +* Update golang.org/x/crypto commit hash to 5bf0f12 (#839) +* Update golang.org/x/crypto commit hash to 5ea612d (#797) +* Update golang.org/x/crypto commit hash to 83a5a9b (#840) +* Update golang.org/x/crypto commit hash to b8e89b7 (#793) +* Update golang.org/x/crypto commit hash to c07d793 (#861) +* Update golang.org/x/crypto commit hash to cd7d49e (#860) +* Update golang.org/x/crypto commit hash to e6e6c4f (#816) +* Update golang.org/x/crypto commit hash to e9a3299 (#851) +* Update golang.org/x/image commit hash to 4410531 (#788) +* Update golang.org/x/image commit hash to 55ae14f (#787) +* Update golang.org/x/image commit hash to 7319ad4 (#852) +* Update golang.org/x/image commit hash to ac19c3e (#798) +* Update golang.org/x/oauth2 commit hash to 0101308 (#776) +* Update golang.org/x/oauth2 commit hash to 01de73c (#762) +* Update golang.org/x/oauth2 commit hash to 16ff188 (#789) +* Update golang.org/x/oauth2 commit hash to 22b0ada (#823) +* Update golang.org/x/oauth2 commit hash to 2e8d934 (#827) +* Update golang.org/x/oauth2 commit hash to 5366d9d (#813) +* Update golang.org/x/oauth2 commit hash to 5e61552 (#833) +* Update golang.org/x/oauth2 commit hash to 6667018 (#783) +* Update golang.org/x/oauth2 commit hash to 81ed05c (#848) +* Update golang.org/x/oauth2 commit hash to 8b1d76f (#764) +* Update golang.org/x/oauth2 commit hash to 9bb9049 (#796) +* Update golang.org/x/oauth2 commit hash to af13f52 (#773) +* Update golang.org/x/oauth2 commit hash to ba52d33 (#794) +* Update golang.org/x/oauth2 commit hash to cd4f82c (#815) +* Update golang.org/x/oauth2 commit hash to d3ed898 (#765) +* Update golang.org/x/oauth2 commit hash to f9ce19e (#775) +* Update golang.org/x/sync commit hash to 036812b (#799) +* Update golang.org/x/term commit hash to 6a3ed07 (#800) +* Update golang.org/x/term commit hash to 72f3dc4 (#828) +* Update golang.org/x/term commit hash to a79de54 (#850) +* Update golang.org/x/term commit hash to b80969c (#843) +* Update golang.org/x/term commit hash to c04ba85 (#849) +* Update golang.org/x/term commit hash to de623e6 (#818) +* Update golang.org/x/term commit hash to f5beecf (#845) +* Update module adlio/trello to v1.9.0 (#825) +* Update module coreos/go-oidc to v3 (#760) +* Update module gabriel-vasile/mimetype to v1.2.0 (#812) +* Update module gabriel-vasile/mimetype to v1.3.0 (#857) +* Update module getsentry/sentry-go to v0.10.0 (#792) +* Update module go-redis/redis/v8 to v8.4.10 (#771) +* Update module go-redis/redis/v8 to v8.4.11 (#774) +* Update module go-redis/redis/v8 to v8.4.9 (#770) +* Update module go-redis/redis/v8 to v8.5.0 (#778) +* Update module go-redis/redis/v8 to v8.6.0 (#795) +* Update module go-sql-driver/mysql to v1.6.0 (#826) +* Update module go-testfixtures/testfixtures/v3 to v3.5.0 (#761) +* Update module go-testfixtures/testfixtures/v3 to v3.6.0 (#838) +* Update module iancoleman/strcase to v0.1.3 (#766) +* Update module imdario/mergo to v0.3.12 (#811) +* Update module jgautheron/goconst to v1 (#804) +* Update module labstack/echo/v4 to v4.2.0 (#785) +* Update module labstack/echo/v4 to v4.2.1 (#810) +* Update module labstack/echo/v4 to v4.2.2 (#830) +* Update module labstack/echo/v4 to v4.3.0 (#856) +* Update module lib/pq to v1.10.0 (#809) +* Update module lib/pq to v1.10.1 (#841) +* Update module mattn/go-sqlite3 to v1.14.7 (#835) +* Update module olekukonko/tablewriter to v0.0.5 (#782) +* Update module prometheus/client_golang to v1.10.0 (#819) +* Update module spf13/afero to v1.6.0 (#820) +* Update module spf13/cobra to v1.1.2 (#781) +* Update module spf13/cobra to v1.1.3 (#784) +* Update module src.techknowlogick.com/xgo to v1.3.0+1.16.0 (#791) +* Update module src.techknowlogick.com/xgo to v1.4.0+1.16.2 (#814) +* Update module stretchr/testify to v1.7.0 (#763) + +## [0.16.1] - 2021-04-22 + +### Fixed + +* Fix checking list rights when accessing a bucket +* Remove old deb-structure ci step +* Fix docker from + +## [0.16.0] - 2021-01-10 + +### Added + +* Add colors for caldav (#738) +* Add email reminders (#743) +* Add "like" filter comparator +* Add login via email (#740) +* Add Microsoft Todo migration (#737) +* Add name field to users +* Add support for migrating todoist boards (#732) +* Add task filter for assignees (#746) +* Add task filter for labels (#747) +* Add task filter for lists and namespaces (#748) +* Add task filter for reminders (#745) +* Add task filters for kanban +* Add testing endpoint to reset db tables (#716) +* Add tests for sending task reminders (#757) +* Add trello migration (#734) +* Authentication with OpenID Connect providers (#713) + +### Fixed + +* Fix completion status in DAV for OpenTasks and multiline descriptions (#697) +* Fix docs about caldav tasks.org +* Fix drone badge in README +* Fix getting current user when updating avatar or user name +* Fix go header lint +* Fix /info endpoint 500 error when no openid providers were configured +* Fix missing auto increments from b0d4902406 on mysql +* Fix not possible to create tasks if metrics were enabled +* Fix password reset without a reseet token +* Fix task updated timestamp not being updated in the response after updating a task + +### Changed + +* Change avatar endpoint +* Change license to AGPLv3 +* Clarify docs about cors configuration +* Don't create a list identifier by default +* Make sure all int64 db fields are using bigint when actually storing the data (#741) +* Make sure a password reset token can be used only once +* Make the debian repo structure for buster instead of strech +* Refactor adding more details to tasks (#739) +* Simplify updating task reminders +* Update code header template +* Update github.com/gordonklaus/ineffassign commit hash to 3b93a88 (#701) +* Update github.com/gordonklaus/ineffassign commit hash to 8eed68e (#755) +* Update github.com/jgautheron/goconst commit hash to b58d7cf (#702) +* Update github.com/jgautheron/goconst commit hash to ccae5bf (#712) +* Update github.com/jgautheron/goconst commit hash to f8e4fe8 (#703) +* Update golang.org/x/crypto commit hash to 0c6587e (#706) +* Update golang.org/x/crypto commit hash to 5f87f34 (#729) +* Update golang.org/x/crypto commit hash to 8b5274c (#733) +* Update golang.org/x/crypto commit hash to 9d13527 (#736) +* Update golang.org/x/crypto commit hash to be400ae (#719) +* Update golang.org/x/crypto commit hash to c8d3bf9 (#710) +* Update golang.org/x/crypto commit hash to eec23a3 (#749) +* Update golang.org/x/image commit hash to 35266b9 (#727) +* Update golang.org/x/lint commit hash to 83fdc39 (#728) +* Update golang.org/x/oauth2 commit hash to 08078c5 (#722) +* Update golang.org/x/oauth2 commit hash to 0b49973 (#718) +* Update golang.org/x/oauth2 commit hash to 9fd6049 (#714) +* Update golang.org/x/sync commit hash to 09787c9 (#725) +* Update golang.org/x/sync commit hash to 67f06af (#695) +* Update golang.org/x/term commit hash to 2321bbc (#731) +* Update golang.org/x/term commit hash to ee85cb9 (#726) +* Update module cweill/gotests to v1.6.0 (#752) +* Update module fzipp/gocyclo to v0.3.1 (#696) +* Update module gabriel-vasile/mimetype to v1.1.2 (#708) +* Update module getsentry/sentry-go to v0.8.0 (#709) +* Update module getsentry/sentry-go to v0.9.0 (#723) +* Update module go-redis/redis/v8 to v8.4.4 (#742) +* Update module go-redis/redis/v8 to v8.4.6 (#756) +* Update module go-redis/redis/v8 to v8.4.7 (#758) +* Update module go-redis/redis/v8 to v8.4.8 (#759) +* Update module lib/pq to v1.9.0 (#717) +* Update module magefile/mage to v1.11.0 (#754) +* Update module mattn/go-sqlite3 to v1.14.5 (#711) +* Update module mattn/go-sqlite3 to v1.14.6 (#751) +* Update module pquerna/otp to v1.3.0 (#705) +* Update module prometheus/client_golang to v1.9.0 (#735) +* Update module spf13/afero to v1.5.0 (#724) +* Update module spf13/afero to v1.5.1 (#730) +* Update module src.techknowlogick.com/xgo to v1.2.0+1.15.6 (#720) +* Update module src.techknowlogick.com/xormigrate to v1.4.0 (#700) +* Update module swaggo/swag to v1.6.9 (#694) +* Update module swaggo/swag to v1.7.0 (#721) +* Update module ulule/limiter/v3 to v3.8.0 (#699) +* Update nfpm config for nfpm v2 +* Use db sessions everywere (#750) + +## [0.15.1] - 2020-10-20 + +### Fixed + +* Fix not possible to create tasks if metrics were enabled + +## [0.15.0] - 2020-10-19 + +### Added + +* Add app support info for DAV (#692) +* Add better tests for namespaces +* Add caldav enabled/disabled to /info endpoint +* Add checks if tasks exist in maps before trying to access them +* Add config option to force ssl connections to connect with the mailer +* Add dav proxy directions to example proxy configurations +* Add docs about using vikunja with utf-8 characters +* Add FreeBSD guide to installation docs +* Add github sponsor link +* Add Golangci Lint (#676) +* Add mage command to create a new migration +* Add option to configure legal urls +* Add rootpath to deb command to not include everything in the deb file +* Add toc to docs +* Add update route to toggle team member admin status +* Add util function to move files +* Disable gocyclo for migration modules +* Favorite lists (#654) +* Favorite tasks (#653) +* Generate config docs from sample config (#684) +* Kanban bucket limits (#652) +* Key-Value Storages (#674) +* Manage users via cli (#632) +* Mention client_max_body_size in nginx proxy settings +* More avatar providers (#622) +* Return rights when reading a single item (#626) +* Saved filters (#655) + +### Fixed + +* Cleanup references to make +* Don't add a subtask to the top level of tasks to not add it twice in the list +* Fetch tasks for caldav lists (#641) +* Fix building for darwin with mage +* Fix creating lists with non ascii characters (#607) +* Fix decoding active users from redis +* Fix dockerimage build +* Fix docs index links +* Fix duplicating a list with background +* "Fix" gocyclo +* Fix loading list background information for uploaded backgrounds +* Fix migrating items with large items from todoist +* Fix nfpm command in drone +* Fix parsing todoist reminder dates +* Fix reading passwords on windows +* Fix release commands in drone +* Fix release trigger +* Fix release trigger in drone +* Fix token renew for link shares +* Fix trigger for pushing release artifacts to drone +* Fix updating team admin status +* Fix upload avatar not working +* Fix users with disabled totp but not enrolled being unable to login +* Makefile: make add EXTRA_GOFLAG to GOFLAGS (#605) +* Make sure built binary files are executable when compressing with upx +* Make sure lists which would have a duplicate identifier can still be duplicated +* Make sure the metrics map accesses only happen explicitly +* Make sure to copy the permissions as well when moving files +* Make sure to only initialize all variables when needed +* Make sure to require admin rights when modifying list/namespace users to be consistent with teams +* Make sure we have git installed when building os packages +* Make sure we have go installed when building os packages (for build step dependencies) +* Only check if a bucket limit is exceeded when moving a task between buckets +* Only try to download attachments from todoist when there is a url +* Pin telegram notification plugin in drone +* Regenerate swagger docs +* Skip directories when moving build release artefacts in drone +* Support absolute iCal timestamps in CalDAV requests (#691) +* Work around tasks with attachments not being duplicated + +### Changed + +* Replace renovate tokens with env +* Switch s3 release bucket to scaleway +* Switch to mage (#651) +* Testing improvements (#666) +* Update docs with testmail command + reorder +* Update github.com/asaskevich/govalidator commit hash to 29e1ff8 (#639) +* Update github.com/asaskevich/govalidator commit hash to 50839af (#637) +* Update github.com/asaskevich/govalidator commit hash to 7a23bdc (#657) +* Update github.com/asaskevich/govalidator commit hash to df4adff (#552) +* Update github.com/c2h5oh/datasize commit hash to 48ed595 (#644) +* Update github.com/gordonklaus/ineffassign commit hash to e36bfde (#625) +* Update github.com/jgautheron/goconst commit hash to 8f5268c (#658) +* Update github.com/shurcooL/vfsgen commit hash to 0d455de (#642) +* Update golang.org/x/crypto commit hash to 123391f (#619) +* Update golang.org/x/crypto commit hash to 5c72a88 (#640) +* Update golang.org/x/crypto commit hash to 7f63de1 (#672) +* Update golang.org/x/crypto commit hash to 84dcc77 (#678) +* Update golang.org/x/crypto commit hash to 948cd5f (#609) +* Update golang.org/x/crypto commit hash to 9e8e0b3 (#685) +* Update golang.org/x/crypto commit hash to ab33eee (#608) +* Update golang.org/x/crypto commit hash to afb6bcd (#668) +* Update golang.org/x/crypto commit hash to c90954c (#671) +* Update golang.org/x/crypto commit hash to eb9a90e (#669) +* Update golang.org/x/image commit hash to 4578eab (#663) +* Update golang.org/x/image commit hash to a67d67e (#664) +* Update golang.org/x/image commit hash to e162460 (#665) +* Update golang.org/x/image commit hash to e59bae6 (#659) +* Update golang.org/x/sync commit hash to 3042136 (#667) +* Update golang.org/x/sync commit hash to b3e1573 (#675) +* Update module 4d63.com/tz to v1.2.0 (#631) +* Update module fzipp/gocyclo to v0.2.0 (#686) +* Update module fzipp/gocyclo to v0.3.0 (#687) +* Update module getsentry/sentry-go to v0.7.0 (#617) +* Update module go-errors/errors to v1.1.1 (#677) +* Update module go-testfixtures/testfixtures/v3 to v3.4.0 (#627) +* Update module go-testfixtures/testfixtures/v3 to v3.4.1 (#693) +* Update module iancoleman/strcase to v0.1.0 (#636) +* Update module iancoleman/strcase to v0.1.1 (#645) +* Update module iancoleman/strcase to v0.1.2 (#660) +* Update module imdario/mergo to v0.3.10 (#615) +* Update module imdario/mergo to v0.3.11 (#629) +* Update module labstack/echo/v4 to v4.1.17 (#646) +* Update module lib/pq to v1.7.1 (#616) +* Update module lib/pq to v1.8.0 (#618) +* Update module mattn/go-sqlite3 to v1.14.1 (#638) +* Update module mattn/go-sqlite3 to v1.14.2 (#647) +* Update module mattn/go-sqlite3 to v1.14.3 (#661) +* Update module mattn/go-sqlite3 to v1.14.4 (#670) +* Update module prometheus/client_golang to v1.8.0 (#681) +* Update module spf13/afero to v1.3.2 (#610) +* Update module spf13/afero to v1.3.3 (#623) +* Update module spf13/afero to v1.3.4 (#628) +* Update module spf13/afero to v1.3.5 (#650) +* Update module spf13/afero to v1.4.0 (#662) +* Update module spf13/afero to v1.4.1 (#673) +* Update module spf13/cobra to v1.1.0 (#679) +* Update module spf13/cobra to v1.1.1 (#690) +* Update module spf13/viper to v1.7.1 (#620) +* Update module src.techknowlogick.com/xgo to v1.1.0+1.15.0 (#630) +* Update module src.techknowlogick.com/xgo to v1 (#613) +* Update module swaggo/swag to v1.6.8 (#680) +* Update renovate token +* Update src.techknowlogick.com/xgo commit hash to 7c2e3c9 (#611) +* Update src.techknowlogick.com/xgo commit hash to 96de19c (#612) +* update theme +* Update xgo to v1.0.0+1.14.6 +* Use db sessions for task-related things (#621) +* Use nfpm to build deb, rpm and apk packages (#689) + +## [0.14.1] - 2020-07-07 + +### Fixed + +* Fix creating lists with non ascii characters (#607) +* Fix decoding active users from redis +* Fix parsing todoist reminder dates +* Make sure the metrics map accesses only happen explicitly + +### Changed + +* Update docs theme + +## [0.14.0] - 2020-07-01 + +### Added + +* Add ability to run the docker container with configurable user and group ids +* Add better errors if the sqlite db file is not writable +* Add cache for initial unsplash collection +* Add docker setup guide from start to finish +* Add docs for restore +* Add dump command (#592) +* Add section to full-docker-example.md for Caddy v2 (#595) +* Add go version to version command +* Add list background information when getting all lists +* Add logging if downloading an image from unsplash fails +* Add migration test in drone (#585) +* Add option to disable totp for everyone +* Add plausible to docs +* Add restarting commands to all example docker compose files +* Add separate docker pipeline for amd64 and arm +* Add test mail command (#571) +* Add todoist migrator to available migrators in info endpoint if it is enabled +* Add unsplash image proxy for images and thumbnails +* Add returning unsplash info when searching +* Don't return all tasks when a user has no lists +* Duplicate Lists (#603) +* Enable upload backgrounds by default +* Generate a random list identifier based on the list title +* List Backgrounds (#568) +* List Background upload (#582) +* Repeat tasks after completion (#587) +* Restore command (#593) +* Sentry integration (#591) +* Todoist Migration (#566) + +### Fixed + +* Ensure consistent naming of title fields (#528) +* Ensure task dates are in the future if a task has a repeating interval (#586) +* Fix caching of initial unsplash results per page +* Fix case-insensitive task search for postgresql (#524) +* Fix docker manifest build +* Fix docker multiarch build +* Fix docs theme build +* Fix getting unsplash thumbnails for non "photo-*" urls +* Fix migration 20200425182634 +* Fix migration 20200516123847 +* Fix migration to add position to task +* Fix misspell +* Fix namespace title not being updated +* Fix not loading timezones on all operating systems +* Fix proxying unsplash images (security) +* Fix removing existing sqlite files +* Fix resetting list, label & namespace colors +* Fix searching for unsplash pictures with words that contain a space +* Fix setting a list identifier to empty +* Fix sqlite db not working when creating a new one +* Fix sqlite path in default config +* Fix swagger docs +* Fix updating the index when moving a task +* Prevent crashing when trying to register with an empty payload +* Properly ping unsplash when using unsplash images +* Return errors when dumping +* Set the list identifier when creating a new task + +### Changed + +* Expose namespace id when querying lists +* Improve getting all namespaces performance (#526) +* Improve memory usage of dump by not loading all files in memory prior to adding them to the zip +* Improve metrics performance +* Load the list when setting a background +* Make the db timezone migration mysql compatible +* Make the `_unix` suffix optional when sorting tasks +* Migrate all timestamps to real iso dates (#594) +* Make sure docker images are only built when tests pass +* Remove build date from binary +* Remove dependencies on build step to speed up test pipeline (#521) +* Remove go mod vendor todo from pr template now that we don't keep dependencies in the repo anymore +* Remove migration dependency to models +* Remove min length for labels, lists, namespaces, tasks and teams +* Remove vendored dependencies +* Reorganize cmd init functions +* Set unsplash empty collection caching to one hour +* Simplify pipeline & add docker manifest step +* Update alpine Docker tag to v3.12 (#573) +* Update and fix staticcheck +* Update dependency github.com/mattn/go-sqlite3 to v1.14.0 +* Update github.com/shurcooL/vfsgen commit hash to 92b8a71 (#599) +* Update golang.org/x/crypto commit hash to 279210d (#577) +* Update golang.org/x/crypto commit hash to 70a84ac (#578) +* Update golang.org/x/crypto commit hash to 75b2880 (#596) +* Update module go-redis/redis/v7 to v7.3.0 (#565) +* Update module go-redis/redis/v7 to v7.4.0 (#579) +* Update module go-testfixtures/testfixtures/v3 to v3.3.0 (#600) +* Update module lib/pq to v1.6.0 (#572) +* Update module lib/pq to v1.7.0 (#581) +* Update module prometheus/client_golang to v1.7.0 (#589) +* Update module prometheus/client_golang to v1.7.1 (#597) +* Update module spf13/afero to v1.3.0 (#588) +* Update module spf13/afero to v1.3.1 (#602) +* Update module spf13/cobra to v1 (#511) +* Update module src.techknowlogick.com/xormigrate to v1.2.1 (#574) +* Update module src.techknowlogick.com/xormigrate to v1.3.0 (#590) +* Update module stretchr/testify to v1.6.0 (#570) +* Update module stretchr/testify to v1.6.1 (#580) +* Update module swaggo/swag to v1.6.7 (#601) +* Update src.techknowlogick.com/xgo commit hash to 209a5cf (#523) +* Update src.techknowlogick.com/xgo commit hash to a09175e (#576) +* Update src.techknowlogick.com/xgo commit hash to eeb7c0a (#575) +* update theme +* Update theme +* Update web handler +* Update xorm.io/xorm 1.0.1 -> 1.0.2 +* Use the db logger instance for logging migration related stuff + +## [0.13.1] - 2020-05-19 + +### Fixed + +* Don't get all tasks if a user has no lists + +## [0.13] - 2020-05-12 + +#### Added + +* Add 2fa for authentification (#383) +* Add categories to error docs +* Add changing email for users +* Add community link +* Add configuration options for log level +* Add creating a new first bucket when creating a new list +* Add docs for changing frontend url +* Add endpoint to disable totp auth +* Add endpoint to get the current users totp status +* Add explanation to docs about cors +* Add github token for renovate (#164) +* Add gosec static analysis +* Add moving tasks between lists (#389) +* Add real buckets for tasks which don't have one (#446) +* Add traefik 2 example configuration +* Configure Renovate (#159) +* Kanban (#393) +* Task filters (#243) +* Task Position (#412) + +#### Fixed + +* Add checking and logging when trying to put a task into a nonexisting bucket +* Fix bucket ID being reset with no need to do so +* Fix creating new things with a link share auth +* Fix dependencies +* Fix gosec in drone +* Fix link share creation & creating admin link shares without admin rights +* Fix moving tasks back into the empty (ID: 0) bucket +* Fix moving tasks in buckets +* Fix not moving its bucket when moving a task between lists +* Fix pagination count for task collection +* Fix parsing array style comparators by query param +* Fix reference to reverse proxies in docs +* Fix removing the last bucket +* Fix replace statements for tail +* Fix team rights not updating for namespace rights +* Fix tests after renaming json fields to snake_case +* Fix total label count when getting all labels (#477) +* Remove setting task bucket to 0 +* Task Filter Fixes (#495) + +#### Changed + +* Change all json fields to snake_case +* Change totp secret datatype from varchar to text +* Update alpine Docker tag to v3.11 (#160) +* Update docs theme +* Update github.com/c2h5oh/datasize commit hash to 28bbd47 (#212) +* Update github.com/gordonklaus/ineffassign commit hash to 7953dde (#233) +* Update github.com/jgautheron/goconst commit hash to cda7ea3 (#228) +* Update github.com/shurcooL/httpfs commit hash to 8d4bc4b (#229) +* Update golang.org/x/crypto commit hash to 056763e (#222) +* Update golang.org/x/crypto commit hash to 06a226f (#504) +* Update golang.org/x/crypto commit hash to 0848c95 (#371) +* Update golang.org/x/crypto commit hash to 3c4aac8 (#419) +* Update golang.org/x/crypto commit hash to 44a6062 (#429) +* Update golang.org/x/crypto commit hash to 4b2356b (#475) +* Update golang.org/x/crypto commit hash to 4bdfaf4 (#438) +* Update golang.org/x/crypto commit hash to 729f1e8 (#458) +* Update golang.org/x/crypto commit hash to a76a400 (#411) +* Update golang.org/x/lint commit hash to 738671d (#223) +* Update module go-redis/redis to v6.15.7 (#234) +* Update module go-redis/redis to v6.15.7 (#290) +* Update module go-redis/redis to v7 (#277) +* Update module go-redis/redis to v7 (#309) +* Update module go-testfixtures/testfixtures/v3 to v3.1.2 (#457) +* Update module go-testfixtures/testfixtures/v3 to v3.2.0 (#505) +* Update module imdario/mergo to v0.3.9 (#238) +* Update module labstack/echo/v4 to v4.1.16 (#241) +* Update module lib/pq to v1.4.0 (#428) +* Update module lib/pq to v1.5.0 (#476) +* Update module lib/pq to v1.5.1 (#485) +* Update module lib/pq to v1.5.2 (#491) +* Update module olekukonko/tablewriter to v0.0.4 (#240) +* Update module prometheus/client_golang to v0.9.4 (#245) +* Update module prometheus/client_golang to v1 +* Update module prometheus/client_golang to v1.6.0 (#463) +* Update module spf13/cobra to v0.0.7 (#271) +* Update module spf13/viper to v1.6.2 (#272) +* Update module spf13/viper to v1.6.3 (#291) +* Update module spf13/viper to v1.7.0 (#494) +* Update module stretchr/testify to v1.5.1 (#274) +* Update Renovate Configuration (#161) +* Update src.techknowlogick.com/xgo commit hash to bb0faa3 (#279) +* Update src.techknowlogick.com/xgo commit hash to c43d4c4 (#224) +* Update xorm redis cacher to use the xorm logger instead of a special separate one +* Update xorm to v1 (#323) + ## [0.12] - 2020-04-04 -#### Added +#### Added * Add support for archiving lists and namespaces (#152) * Colors for lists and namespaces (#155) @@ -33,7 +1649,7 @@ All releases can be found on https://code.vikunja.io/api/releases. ## [0.11] - 2020-03-01 -### Added +### Added * Add config options for cors handling (#124) * Add config options for task attachments (#125) @@ -101,7 +1717,7 @@ All releases can be found on https://code.vikunja.io/api/releases. ## [0.9] - 2019-11-24 -### Added +### Added * Task Attachments (#104) * Task Relations (#103) @@ -114,7 +1730,8 @@ All releases can be found on https://code.vikunja.io/api/releases. ### Fixed * Fix default logging settings (#107) -* Fixed a bug where adding assignees or reminders via an update would re-create them and not respect already inserted ones, leaving a lot of garbage +* Fixed a bug where adding assignees or reminders via an update would re-create them and not respect already inserted + ones, leaving a lot of garbage * Fixed a bug where deleting an attachment would cause a nil panic * Fixed building docs theme * Fixed error when setting max file size on 32-Bit systems @@ -127,7 +1744,7 @@ All releases can be found on https://code.vikunja.io/api/releases. * Fixed removing reminders * Small link share fixes (#96) -### Changed +### Changed * Improve pagination (#105) * Moved `teams_{namespace|list}_*` to `{namespace|list}_teams_*` for better consistency (#101) @@ -144,7 +1761,7 @@ All releases can be found on https://code.vikunja.io/api/releases. ### Added -* Better Caldav support (#73) +* Better CalDAV support (#73) * Added settings for max open/idle connections and max connection lifetime (#74) * /info endpoint (#85) * Added http endpoint to list all users on a list (#87) @@ -248,7 +1865,8 @@ All releases can be found on https://code.vikunja.io/api/releases. * Updated libraries * Updated drone to version 1 -* Releases are now signed with our pgp key (more info about this on [the download page](https://vikunja.io/en/download/)). +* Releases are now signed with our pgp key (more info about this + on [the download page](https://vikunja.io/en/download/)). ## [0.5] - 2018-12-02 @@ -278,7 +1896,7 @@ All releases can be found on https://code.vikunja.io/api/releases. ## [0.3] - 2018-11-02 -### Added +### Added * Password reset * Email verification when registering diff --git a/Dockerfile b/Dockerfile index 1183a2452..278d0d877 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,45 +1,43 @@ +# syntax=docker/dockerfile:1 +# ┬─┐┬ ┐o┬ ┬─┐ +# │─││ │││ │ │ +# ┘─┘┘─┘┘┘─┘┘─┘ -############## -# Build stage -FROM golang:1-alpine AS build-env +FROM --platform=$BUILDPLATFORM techknowlogick/xgo:go-1.20.x AS builder -ARG VIKUNJA_VERSION -ENV TAGS "sqlite" -ENV GO111MODULE=on -ENV GOFLAGS=-mod=vendor +RUN go install github.com/magefile/mage@latest && \ + mv /go/bin/mage /usr/local/go/bin -# Build deps -RUN apk --no-cache add build-base git +WORKDIR /go/src/code.vikunja.io/api +COPY . ./ -# Setup repo -COPY . ${GOPATH}/src/code.vikunja.io/api -WORKDIR ${GOPATH}/src/code.vikunja.io/api +ARG TARGETOS TARGETARCH TARGETVARIANT -# Checkout version if set -RUN if [ -n "${VIKUNJA_VERSION}" ]; then git checkout "${VIKUNJA_VERSION}"; fi \ - && make clean generate build +RUN export PATH=$PATH:$GOPATH/bin && \ + mage build:clean && \ + mage release:xgo "${TARGETOS}/${TARGETARCH}/${TARGETVARIANT}" + +# ┬─┐┬ ┐┌┐┐┌┐┐┬─┐┬─┐ +# │┬┘│ │││││││├─ │┬┘ +# ┘└┘┘─┘┘└┘┘└┘┴─┘┘└┘ -################### # The actual image # Note: I wanted to use the scratch image here, but unfortunatly the go-sqlite bindings require cgo and # because of this, the container would not start when I compiled the image without cgo. -FROM alpine:3.11 +FROM alpine:3.18 AS runner LABEL maintainer="maintainers@vikunja.io" - -WORKDIR /app/vikunja/ -COPY --from=build-env /go/src/code.vikunja.io/api/vikunja . -RUN adduser -S -D vikunja -h /app/vikunja -H \ - && chown vikunja -R /app/vikunja -ENV VIKUNJA_SERVICE_ROOTPATH=/app/vikunja/ - -# Fix time zone settings not working -RUN apk --no-cache add tzdata - -# Files permissions -RUN mkdir /app/vikunja/files && \ - chown -R vikunja /app/vikunja/files -VOLUME /app/vikunja/files - -USER vikunja -CMD ["/app/vikunja/vikunja"] +WORKDIR /app/vikunja +ENTRYPOINT [ "/sbin/tini", "-g", "--", "/entrypoint.sh" ] EXPOSE 3456 + +ENV VIKUNJA_SERVICE_ROOTPATH=/app/vikunja/ +ENV PUID 1000 +ENV PGID 1000 + +RUN apk --update --no-cache add tzdata tini shadow && \ + addgroup vikunja && \ + adduser -s /bin/sh -D -G vikunja vikunja -h /app/vikunja -H +COPY docker/entrypoint.sh /entrypoint.sh +RUN chmod 0755 /entrypoint.sh && mkdir files + +COPY --from=builder /build/vikunja-* vikunja diff --git a/LICENSE b/LICENSE index e72bfddab..0ad25db4b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies @@ -7,17 +7,15 @@ Preamble - The GNU General Public License is a free, copyleft license for -software and other kinds of works. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to +our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. +software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you @@ -26,44 +24,34 @@ them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. The precise terms and conditions for copying, distribution and modification follow. @@ -72,7 +60,7 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. + "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. @@ -549,35 +537,45 @@ to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Use with the GNU Affero General Public License. + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single +under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General +Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published +GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's +versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. @@ -635,40 +633,29 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Affero General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see +For more information on this, and how to apply and follow the GNU AGPL, see . - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index d72095ef2..000000000 --- a/Makefile +++ /dev/null @@ -1,245 +0,0 @@ -DIST := dist -IMPORT := code.vikunja.io/api - -SED_INPLACE := sed -i - -ifeq ($(OS), Windows_NT) - EXECUTABLE := vikunja.exe -else - EXECUTABLE := vikunja - UNAME_S := $(shell uname -s) - ifeq ($(UNAME_S),Darwin) - SED_INPLACE := sed -i '' - endif -endif - -GOFILES := $(shell find . -name "*.go" -type f ! -path "./vendor/*" ! -path "*/bindata.go") -GOFMT ?= gofmt -s - -GOFLAGS := -v -mod=vendor -EXTRA_GOFLAGS ?= - -LDFLAGS := -X "code.vikunja.io/api/pkg/version.Version=$(shell git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')" -X "main.Tags=$(TAGS)" -X "code.vikunja.io/api/pkg/version.BuildTime=$(shell date -R)" - -PACKAGES ?= $(filter-out code.vikunja.io/api/pkg/integrations,$(shell go list -mod=vendor ./... | grep -v /vendor/)) -SOURCES ?= $(shell find . -name "*.go" -type f) - -TAGS ?= - -ifeq ($(OS), Windows_NT) - EXECUTABLE := vikunja.exe -else - EXECUTABLE := vikunja -endif - -ifneq ($(DRONE_TAG),) - VERSION ?= $(subst v,,$(DRONE_TAG)) -else - ifneq ($(DRONE_BRANCH),) - VERSION ?= $(subst release/v,,$(DRONE_BRANCH)) - else - VERSION ?= master - endif -endif - -ifeq ($(DRONE_WORKSPACE),'') - BINLOCATION := $(EXECUTABLE) -else - BINLOCATION := $(DIST)/binaries/$(EXECUTABLE)-$(VERSION)-linux-amd64 -endif - -ifeq ($(VERSION),master) - PKGVERSION := $(shell git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/') -else - PKGVERSION := $(VERSION) -endif - -.PHONY: all -all: build - -.PHONY: clean -clean: - go clean ./... - rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) - -.PHONY: test -test: - # We run everything sequentially and not in parallel to prevent issues with real test databases - VIKUNJA_SERVICE_ROOTPATH=$(shell pwd) go test $(GOFLAGS) -p 1 -cover -coverprofile cover.out $(PACKAGES) - -.PHONY: test-coverage -test-coverage: test - go tool cover -html=cover.out -o cover.html - -.PHONY: integration-test -integration-test: - # We run everything sequentially and not in parallel to prevent issues with real test databases - VIKUNJA_SERVICE_ROOTPATH=$(shell pwd) go test $(GOFLAGS) -p 1 code.vikunja.io/api/pkg/integrations - -.PHONY: lint -lint: - @hash golint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) golang.org/x/lint/golint; \ - fi - for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done; - -.PHONY: fmt -fmt: - $(GOFMT) -w $(GOFILES) - -.PHONY: fmt-check -fmt-check: - # get all go files and run go fmt on them - @diff=$$($(GOFMT) -d $(GOFILES)); \ - if [ -n "$$diff" ]; then \ - echo "Please run 'make fmt' and commit the result:"; \ - echo "$${diff}"; \ - exit 1; \ - fi; - -.PHONY: build -build: generate $(EXECUTABLE) - -.PHONY: generate -generate: - go generate code.vikunja.io/api/pkg/static - -$(EXECUTABLE): $(SOURCES) - go build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@ - -.PHONY: compress-build -compress-build: - upx -9 $(EXECUTABLE) - -.PHONY: release -release: release-dirs release-windows release-linux release-darwin release-copy release-check release-os-package release-zip - -.PHONY: release-dirs -release-dirs: - mkdir -p $(DIST)/binaries $(DIST)/release $(DIST)/zip - -.PHONY: release-windows -release-windows: - @hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) src.techknowlogick.com/xgo; \ - fi - xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out vikunja-$(VERSION) . -ifneq ($(DRONE_WORKSPACE),'') - mv /build/* $(DIST)/binaries -endif - -.PHONY: release-linux -release-linux: - @hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) src.techknowlogick.com/xgo; \ - fi - xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out vikunja-$(VERSION) . -ifneq ($(DRONE_WORKSPACE),'') - mv /build/* $(DIST)/binaries -endif - -.PHONY: release-darwin -release-darwin: - @hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) src.techknowlogick.com/xgo; \ - fi - xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out vikunja-$(VERSION) . -ifneq ($(DRONE_WORKSPACE),'') - mv /build/* $(DIST)/binaries -endif - -# Compresses all releases made by make release-* but not mips* releases since upx can't handle these. -.PHONY: release-compress -release-compress: - $(foreach file,$(filter-out $(wildcard $(wildcard $(DIST)/binaries/$(EXECUTABLE)-*mips*)),$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*)), upx -9 $(file);) - -.PHONY: release-copy -release-copy: - $(foreach file,$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));) - -.PHONY: release-check -release-check: - cd $(DIST)/release; $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;) - -.PHONY: release-os-package -release-os-package: - $(foreach file,$(filter-out %.sha256,$(wildcard $(DIST)/release/$(EXECUTABLE)-*)),mkdir $(file)-full;mv $(file) $(file)-full/; mv $(file).sha256 $(file)-full/; cp config.yml.sample $(file)-full/config.yml; cp LICENSE $(file)-full/; ) - -.PHONY: release-zip -release-zip: - $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),cd $(file); zip -r ../../zip/$(shell basename $(file)).zip *; cd ../../../; ) - -# Builds a deb package using fpm from a previously created binary (using make build) -.PHONY: build-deb -build-deb: - fpm -s dir -t deb --url https://vikunja.io -n vikunja -v $(PKGVERSION) --license GPLv3 --directories /opt/vikunja --after-install ./build/after-install.sh --description 'Vikunja is an open-source todo application, written in Go. It lets you create lists,tasks and share them via teams or directly between users.' -m maintainers@vikunja.io ./$(BINLOCATION)=/opt/vikunja/vikunja ./config.yml.sample=/etc/vikunja/config.yml; - -.PHONY: reprepro -reprepro: - reprepro_expect debian includedeb strech ./$(EXECUTABLE)_$(PKGVERSION)_amd64.deb - -.PHONY: got-swag -got-swag: do-the-swag - @diff=$$(git diff docs/swagger/swagger.json); \ - if [ -n "$$diff" ]; then \ - echo "Please run 'make do-the-swag' and commit the result:"; \ - echo "$${diff}"; \ - exit 1; \ - fi; - -.PHONY: do-the-swag -do-the-swag: - @hash swag > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) github.com/swaggo/swag/cmd/swag; \ - fi - swag init -g pkg/routes/routes.go -o ./pkg/swagger; - # Fix the generated swagger file, currently a workaround until swaggo can properly use go mod - sed -i '/"definitions": {/a "code.vikunja.io.web.HTTPError": {"type": "object","properties": {"code": {"type": "integer"},"message": {"type": "string"}}},' pkg/swagger/docs.go; - sed -i 's/code.vikunja.io\/web.HTTPError/code.vikunja.io.web.HTTPError/g' pkg/swagger/docs.go; - sed -i 's/package\ docs/package\ swagger/g' pkg/swagger/docs.go; - sed -i 's/` + \\"`\\" + `/` + "`" + `/g' pkg/swagger/docs.go; - -.PHONY: misspell-check -misspell-check: - @hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) github.com/client9/misspell/cmd/misspell; \ - fi - for S in $(GOFILES); do misspell -error $$S || exit 1; done; - -.PHONY: ineffassign-check -ineffassign-check: - @hash ineffassign > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go install $(GOFLAGS) github.com/gordonklaus/ineffassign; \ - fi - for S in $(GOFILES); do ineffassign $$S || exit 1; done; - -.PHONY: gocyclo-check -gocyclo-check: - @hash gocyclo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go get -u github.com/fzipp/gocyclo; \ - go install $(GOFLAGS) github.com/fzipp/gocyclo; \ - fi - for S in $(GOFILES); do gocyclo -over 24 $$S || exit 1; done; - -.PHONY: static-check -static-check: - @hash staticcheck > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go get -u honnef.co/go/tools; \ - go install $(GOFLAGS) honnef.co/go/tools/cmd/staticcheck; \ - fi - staticcheck $(PACKAGES); - -.PHONY: gosec-check -gosec-check: - @hash ./bin/gosec > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s 1.2.0; \ - fi - for S in $(PACKAGES); do ./bin/gosec $$S || exit 1; done; - -.PHONY: goconst-check -goconst-check: - @hash goconst > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ - go get -u github.com/jgautheron/goconst/cmd/goconst; \ - go install $(GOFLAGS) github.com/jgautheron/goconst/cmd/goconst; \ - fi - for S in $(PACKAGES); do goconst $$S || exit 1; done; diff --git a/README.md b/README.md index 71dc169b1..5a5236616 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -[![Build Status](https://drone1.kolaente.de/api/badges/vikunja/api/status.svg)](https://drone1.kolaente.de/vikunja/api) -[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](LICENSE) -[![Download](https://img.shields.io/badge/download-v0.12-brightgreen.svg)](https://dl.vikunja.io) +[![Build Status](https://drone.kolaente.de/api/badges/vikunja/api/status.svg)](https://drone.kolaente.de/vikunja/api) +[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](LICENSE) +[![Download](https://img.shields.io/badge/download-v0.20.4-brightgreen.svg)](https://dl.vikunja.io) [![Docker Pulls](https://img.shields.io/docker/pulls/vikunja/api.svg)](https://hub.docker.com/r/vikunja/api/) [![Swagger Docs](https://img.shields.io/badge/swagger-docs-brightgreen.svg)](https://try.vikunja.io/api/v1/docs) -[![Go Report Card](https://goreportcard.com/badge/git.kolaente.de/vikunja/api)](https://goreportcard.com/report/git.kolaente.de/vikunja/api) +[![Go Report Card](https://goreportcard.com/badge/kolaente.dev/vikunja/api)](https://goreportcard.com/report/kolaente.dev/vikunja/api) # Vikunja API @@ -13,21 +13,20 @@ # Table of contents +* [Security Reports](#security-reports) * [Features](#features) * [Docs](#docs) * [Roadmap](#roadmap) * [Contributing](#contributing) * [License](#license) +## Security Reports + +If you find any security-related issues you don't want to disclose publicly, please use [the contact information on our website](https://vikunja.io/contact/#security). + ## Features -* Create TODO lists with tasks - * Reminder for tasks -* Namespaces: A "group" which bundels multiple lists -* Share lists and namespaces with teams and users with granular permissions -* Plenty of details for tasks - -See [the features page](https://vikunja.io/en/features/) on our website for a more exaustive list or +See [the features page](https://vikunja.io/features/) on our website for a more exaustive list or try it on [try.vikunja.io](https://try.vikunja.io)! ## Docs @@ -35,46 +34,22 @@ try it on [try.vikunja.io](https://try.vikunja.io)! * [Installing](https://vikunja.io/docs/installing/) * [Build from source](https://vikunja.io/docs/build-from-sources/) * [Development setup](https://vikunja.io/docs/development/) -* [Makefile](https://vikunja.io/docs/makefile/) +* [Magefile](https://vikunja.io/docs/magefile/) * [Testing](https://vikunja.io/docs/testing/) -All docs can be found on [the vikunja home page](https://vikunja.io/docs/). +All docs can be found on [the Vikunja home page](https://vikunja.io/docs/). ### Roadmap -> I know, it's still a long way to go. I'm currently working on a lot of "basic" features, the exiting things will come later. Don't worry, they'll come. +See [the roadmap](https://my.vikunja.cloud/share/QFyzYEmEYfSyQfTOmIRSwLUpkFjboaBqQCnaPmWd/auth) (hosted on Vikunja!) for more! -* [x] Prioritize tasks -* [x] Subtasks -* [x] Repeating tasks -* [x] Get tasks via caldav -* [x] Get all your tasks for an interval (day/month/period) -* [x] Labels for tasks -* [x] Assign users to tasks -* [x] Attachments on tasks -* [x] More sharing features - * [x] Share with individual users - * [x] Share via a world-readable link with or without password, like Nextcloud -* [x] Disable registration, making an instance "invite-only" -* [ ] SSE to notify multiple clients of updates when something was changed -* [ ] "Smart Lists" - Create lists based on filters -* [ ] IMAP-Integration - Send an email to Vikunja to create a new task -* [ ] Webhooks - Trigger other events when an action is done (like completing a task) -* [ ] Performace statistics - Get an overview and beautiful charts about what you got done this month -* [ ] Activity feeds - Get a quick overview about who did what -* [ ] Bulk-edit multiple tasks at once -* [ ] Team-efforts - Requiring a task to be marked as done by multiple members until it's done -* [ ] Global limits for namespaces/lists/tasks - -See [our roadmap](https://my.vikunja.cloud/share/QFyzYEmEYfSyQfTOmIRSwLUpkFjboaBqQCnaPmWd/auth) (hosted on Vikunja!) for even more! - -* [ ] [Mobile apps](https://code.vikunja.io/app) (seperate repo) *In Progress* -* [ ] [Webapp](https://code.vikunja.io/frontend) (seperate repo) *In Progress* +* [ ] [Mobile apps](https://code.vikunja.io/app) (separate repo) *In Progress* +* [ ] [Webapp](https://code.vikunja.io/frontend) (separate repo) *In Progress* ## Contributing -Fork -> Push -> Pull-Request. Also see the [dev docs](https://vikunja.io/docs/development/) for more infos. +Fork -> Push -> Pull-Request. Also see the [dev docs](https://vikunja.io/docs/development/) for more info. ## License -This project is licensed under the GPLv3 License. See the [LICENSE](LICENSE) file for the full license text. +This project is licensed under the AGPLv3 License. See the [LICENSE](LICENSE) file for the full license text. diff --git a/build/after-install.sh b/build/after-install.sh index 8e0097605..4dc24b15c 100644 --- a/build/after-install.sh +++ b/build/after-install.sh @@ -1,5 +1,6 @@ #!/bin/bash -ln -s /opt/vikunja/vikunja /usr/bin/vikunja + +systemctl enable vikunja.service # Fix the config to contain proper values NEW_SECRET=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) diff --git a/build/reprepro-dist-conf b/build/reprepro-dist-conf index 8ea7e4c7b..92b4fa20b 100644 --- a/build/reprepro-dist-conf +++ b/build/reprepro-dist-conf @@ -1,8 +1,8 @@ Origin: dl.vikunja.io Label: Vikunja -Codename: strech +Codename: buster Architectures: amd64 Components: main Description: The debian repo for Vikunja builds. SignWith: yes -Pull: strech +Pull: buster diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 000000000..02cfdb85a --- /dev/null +++ b/cliff.toml @@ -0,0 +1,59 @@ +[changelog] +body = """ +{% if version %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [unreleased] +{% endif %}\ + + +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | upper_first }} + {% for commit in commits + | filter(attribute="scope") + | sort(attribute="scope") %} + * *({{commit.scope}})* {{ commit.message | upper_first }} + {%- if commit.breaking %} + {% raw %} {% endraw %}- **BREAKING**: {{commit.breaking_description}} + {%- endif -%} + {%- endfor -%} + {%- for commit in commits %} + {%- if commit.scope -%} + {% else -%} + * {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}]({{ commit.id }})) + {% if commit.breaking -%} + {% raw %} {% endraw %}- **BREAKING**: {{commit.breaking_description}} + {% endif -%} + {% endif -%} + {% endfor -%} + {% raw %}\n{% endraw %}\ +{% endfor %}\n + +""" +#{% for group, commits in commits | group_by(attribute="group") %} +# ### {{ group | upper_first }} +# {% for commit in commits %}\ +# - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}]({{ commit.id }})) +# {% endfor %}\ +#{% endfor %}\n +# remove the leading and trailing whitespace from the template +trim = true + +[git] +conventional_commits = true +filter_unconventional = false +commit_parsers = [ + { message = ".*(deps).*", group = "Dependencies"}, + { message = "^feat", group = "Features"}, + { message = "^fix", group = "Bug Fixes"}, + { message = "^doc", group = "Documentation"}, + { message = "^perf", group = "Performance"}, + { message = "^refactor", group = "Refactor"}, + { message = "^style", group = "Styling"}, + { message = "^test", group = "Testing"}, + { message = "^chore\\(release\\): prepare for", skip = true}, + { message = "^chore", group = "Miscellaneous Tasks"}, + { body = ".*security", group = "Security"}, + { message = ".*", group = "Other", default_scope = "other"}, # Everything that's not a conventional commit goes into the "Other" category +] + diff --git a/code-header-template.txt b/code-header-template.txt new file mode 100644 index 000000000..9a2d19a76 --- /dev/null +++ b/code-header-template.txt @@ -0,0 +1,15 @@ +Vikunja is a to-do list application to facilitate your life. +Copyright 2018-2021 Vikunja and contributors. All rights reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public Licensee as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public Licensee for more details. + +You should have received a copy of the GNU Affero General Public Licensee +along with this program. If not, see . \ No newline at end of file diff --git a/config.yml.sample b/config.yml.sample index 30b149a56..55db80fe5 100644 --- a/config.yml.sample +++ b/config.yml.sample @@ -3,62 +3,101 @@ service: # Default is a random token which will be generated at each startup of vikunja. # (This means all already issued tokens will be invalid once you restart vikunja) JWTSecret: "" + # The duration of the issued JWT tokens in seconds. + # The default is 259200 seconds (3 Days). + jwtttl: 259200 + # The duration of the "remember me" time in seconds. When the login request is made with + # the long param set, the token returned will be valid for this period. + # The default is 2592000 seconds (30 Days). + jwtttllong: 2592000 # The interface on which to run the webserver interface: ":3456" + # Path to Unix socket. If set, it will be created and used instead of tcp + unixsocket: + # Permission bits for the Unix socket. Note that octal values must be prefixed by "0o", e.g. 0o660 + unixsocketmode: # The URL of the frontend, used to send password reset emails. frontendurl: "" # The base path on the file system where the binary and assets are. # Vikunja will also look in this path for a config file, so you could provide only this variable to point to a folder # with a config file which will then be used. rootpath: + # Path on the file system to serve static files from. Set to the path of the frontend files to host frontend alongside the api. + staticpath: "" # The max number of items which can be returned per page maxitemsperpage: 50 - # If set to true, enables a /metrics endpoint for prometheus to collect metrics about the system - # You'll need to use redis for this in order to enable common metrics over multiple nodes - enablemetrics: false # Enable the caldav endpoint, see the docs for more details enablecaldav: true # Set the motd message, available from the /info endpoint motd: "" - # Enable sharing of lists via a link + # Enable sharing of project via a link enablelinksharing: true # Whether to let new users registering themselves or not enableregistration: true # Whether to enable task attachments or not enabletaskattachments: true - # The time zone all timestamps are in + # The time zone all timestamps are in. Please note that time zones have to use [the official tz database names](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). UTC or GMT offsets won't work. timezone: GMT # Whether task comments should be enabled or not enabletaskcomments: true + # Whether totp is enabled. In most cases you want to leave that enabled. + enabletotp: true + # If not empty, enables logging of crashes and unhandled errors in sentry. + sentrydsn: '' + # If not empty, this will enable `/test/{table}` endpoints which allow to put any content in the database. + # Used to reset the db before frontend tests. Because this is quite a dangerous feature allowing for lots of harm, + # each request made to this endpoint needs to provide an `Authorization: ` header with the token from below.
+ # **You should never use this unless you know exactly what you're doing** + testingtoken: '' + # If enabled, vikunja will send an email to everyone who is either assigned to a task or created it when a task reminder + # is due. + enableemailreminders: true + # If true, will allow users to request the complete deletion of their account. When using external authentication methods + # it may be required to coordinate with them in order to delete the account. This setting will not affect the cli commands + # for user deletion. + enableuserdeletion: true + # The maximum size clients will be able to request for user avatars. + # If clients request a size bigger than this, it will be changed on the fly. + maxavatarsize: 1024 database: # Database type to use. Supported types are mysql, postgres and sqlite. type: "sqlite" # Database user which is used to connect to the database. user: "vikunja" - # Databse password + # Database password password: "" - # Databse host + # Database host host: "localhost" - # Databse to use + # Database to use database: "vikunja" # When using sqlite, this is the path where to store the data - Path: "./vikunja.db" + path: "./vikunja.db" # Sets the max open connections to the database. Only used when using mysql and postgres. maxopenconnections: 100 # Sets the maximum number of idle connections to the db. maxidleconnections: 50 - # The maximum lifetime of a single db connection in miliseconds. + # The maximum lifetime of a single db connection in milliseconds. maxconnectionlifetime: 10000 # Secure connection mode. Only used with postgres. # (see https://pkg.go.dev/github.com/lib/pq?tab=doc#hdr-Connection_String_Parameters) sslmode: disable + # The path to the client cert. Only used with postgres. + sslcert: "" + # The path to the client key. Only used with postgres. + sslkey: "" + # The path to the ca cert. Only used with postgres. + sslrootcert: "" + # Enable SSL/TLS for mysql connections. Options: false, true, skip-verify, preferred + tls: false cache: # If cache is enabled or not enabled: false - # Cache type. Possible values are memory or redis, you'll need to enable redis below when using redis - type: memory + # Cache type. Possible values are "keyvalue", "memory" or "redis". + # When choosing "keyvalue" this setting follows the one configured in the "keyvalue" section. + # When choosing "redis" you will need to configure the redis connection separately. + type: keyvalue # When using memory this defines the maximum size an element can take maxelementsize: 1000 @@ -67,15 +106,17 @@ redis: enabled: false # The host of the redis server including its port. host: 'localhost:6379' - # The password used to authenicate against the redis server + # The password used to authenticate against the redis server password: '' # 0 means default database db: 0 cors: # Whether to enable or disable cors headers. + # Note: If you want to put the frontend and the api on separate domains or ports, you will need to enable this. + # Otherwise the frontend won't be able to make requests to the api through the browser. enable: true - # A list of origins which may access the api. + # A list of origins which may access the api. These need to include the protocol (`http://` or `https://`) and port, if any. origins: - "*" # How long (in seconds) the results of a preflight request can be cached. @@ -86,8 +127,11 @@ mailer: enabled: false # SMTP Host host: "" - # SMTP Host port + # SMTP Host port. + # **NOTE:** If you're unable to send mail and the only error you see in the logs is an `EOF`, try setting the port to `25`. port: 587 + # SMTP Auth Type. Can be either `plain`, `login` or `cram-md5`. + authtype: "plain" # SMTP username username: "user" # SMTP password @@ -100,22 +144,34 @@ mailer: queuelength: 100 # The timeout in seconds after which the current open connection to the mailserver will be closed. queuetimeout: 30 + # By default, vikunja will try to connect with starttls, use this option to force it to use ssl. + forcessl: false log: # A folder where all the logfiles should go. path: logs # Whether to show any logging at all or none enabled: true - # Where the error log should go. Possible values are stdout, stderr, file or off to disable error logging. - errors: "stdout" # Where the normal log should go. Possible values are stdout, stderr, file or off to disable standard logging. standard: "stdout" + # Change the log level. Possible values (case-insensitive) are CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG. + level: "INFO" # Whether or not to log database queries. Useful for debugging. Possible values are stdout, stderr, file or off to disable database logging. database: "off" + # The log level for database log messages. Possible values (case-insensitive) are CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG. + databaselevel: "WARNING" # Whether to log http requests or not. Possible values are stdout, stderr, file or off to disable http logging. http: "stdout" - # Echo has its own logging which usually is unnessecary, which is why it is disabled by default. Possible values are stdout, stderr, file or off to disable standard logging. + # Echo has its own logging which usually is unnecessary, which is why it is disabled by default. Possible values are stdout, stderr, file or off to disable standard logging. echo: "off" + # Whether or not to log events. Useful for debugging. Possible values are stdout, stderr, file or off to disable events logging. + events: "off" + # The log level for event log messages. Possible values (case-insensitive) are ERROR, INFO, DEBUG. + eventslevel: "info" + # Whether or not to log mail log messages. This will not log mail contents. Possible values are stdout, stderr, file or off to disable mail-related logging. + mail: "off" + # The log level for mail log messages. Possible values (case-insensitive) are ERROR, WARNING, INFO, DEBUG. + maillevel: "info" ratelimit: # whether or not to enable the rate limit @@ -126,8 +182,10 @@ ratelimit: period: 60 # The max number of requests a user is allowed to do in the configured time period limit: 100 - # The store where the limit counter for each user is stored. Possible values are "memory" or "redis" - store: memory + # The store where the limit counter for each user is stored. + # Possible values are "keyvalue", "memory" or "redis". + # When choosing "keyvalue" this setting follows the one configured in the "keyvalue" section. + store: keyvalue files: # The path where files are stored @@ -137,26 +195,149 @@ files: maxsize: 20MB migration: - # These are the settings for the wunderlist migrator - wunderlist: - # Wheter to enable the wunderlist migrator or not + todoist: + # Wheter to enable the todoist migrator or not enable: false - # The client id, required for making requests to the wunderlist api - # You need to register your vikunja instance at https://developer.wunderlist.com/apps/new to get this + # The client id, required for making requests to the todoist api + # You need to register your vikunja instance at https://developer.todoist.com/appconsole.html to get this clientid: - # The client secret, also required for making requests to the wunderlist api + # The client secret, also required for making requests to the todoist api clientsecret: - # The url where clients are redirected after they authorized Vikunja to access their wunderlist stuff. - # This needs to match the url you entered when registering your Vikunja instance at wunderlist. - # This is usually the frontend url where the frontend then makes a request to /migration/wunderlist/migrate - # with the code obtained from the wunderlist api. - # Note that the vikunja frontend expects this to be /migrate/wunderlist - redirecturl: + # The url where clients are redirected after they authorized Vikunja to access their todoist items. + # This needs to match the url you entered when registering your Vikunja instance at todoist. + # This is usually the frontend url where the frontend then makes a request to /migration/todoist/migrate + # with the code obtained from the todoist api. + # Note that the vikunja frontend expects this to be /migrate/todoist + redirecturl: /migrate/todoist + trello: + # Whether to enable the trello migrator or not + enable: false + # The client id, required for making requests to the trello api + # You need to register your vikunja instance at https://trello.com/app-key (log in before you visit that link) to get this + key: + # The url where clients are redirected after they authorized Vikunja to access their trello cards. + # This needs to match the url you entered when registering your Vikunja instance at trello. + # This is usually the frontend url where the frontend then makes a request to /migration/trello/migrate + # with the code obtained from the trello api. + # Note that the vikunja frontend expects this to end on /migrate/trello. + redirecturl: /migrate/trello + microsofttodo: + # Wheter to enable the microsoft todo migrator or not + enable: false + # The client id, required for making requests to the microsoft graph api + # See https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#register-an-application + # for information about how to register your Vikunja instance. + clientid: + # The client secret, also required for making requests to the microsoft graph api + clientsecret: + # The url where clients are redirected after they authorized Vikunja to access their microsoft todo tasks. + # This needs to match the url you entered when registering your Vikunja instance at microsoft. + # This is usually the frontend url where the frontend then makes a request to /migration/microsoft-todo/migrate + # with the code obtained from the microsoft graph api. + # Note that the vikunja frontend expects this to be /migrate/microsoft-todo + redirecturl: /migrate/microsoft-todo avatar: - # Switch between avatar providers. Possible values are gravatar and default. - # gravatar will fetch the avatar based on the user email. - # default will return a default avatar for every request. - provider: gravatar # When using gravatar, this is the duration in seconds until a cached gravatar user avatar expires gravatarexpiration: 3600 + +backgrounds: + # Whether to enable backgrounds for projects at all. + enabled: true + providers: + upload: + # Whether to enable uploaded project backgrounds + enabled: true + unsplash: + # Whether to enable setting backgrounds from unsplash as project backgrounds + enabled: false + # You need to create an application for your installation at https://unsplash.com/oauth/applications/new + # and set the access token below. + accesstoken: + # The unsplash application id is only used for pingback and required as per their api guidelines. + # You can find the Application ID in the dashboard for your API application. It should be a numeric ID. + # It will only show in the UI if your application has been approved for Enterprise usage, therefore if + # you’re in Demo mode, you can also find the ID in the URL at the end: https://unsplash.com/oauth/applications/:application_id + applicationid: + +# Legal urls +# Will be shown in the frontend if configured here +legal: + imprinturl: + privacyurl: + +# Key Value Storage settings +# The Key Value Storage is used for different kinds of things like metrics and a few cache systems. +keyvalue: + # The type of the storage backend. Can be either "memory" or "redis". If "redis" is chosen it needs to be configured separately. + type: "memory" + +auth: + # Local authentication will let users log in and register (if enabled) through the db. + # This is the default auth mechanism and does not require any additional configuration. + local: + # Enable or disable local authentication + enabled: true + # OpenID configuration will allow users to authenticate through a third-party OpenID Connect compatible provider.
+ # The provider needs to support the `openid`, `profile` and `email` scopes.
+ # **Note:** Some openid providers (like gitlab) only make the email of the user available through openid claims if they have set it to be publicly visible. + # If the email is not public in those cases, authenticating will fail. + # **Note 2:** The frontend expects to be redirected after authentication by the third party + # to /auth/openid/. Please make sure to configure the redirect url with your third party + # auth service accordingly if you're using the default vikunja frontend. + # Take a look at the [default config file](https://kolaente.dev/vikunja/api/src/branch/main/config.yml.sample) for more information about how to configure openid authentication. + openid: + # Enable or disable OpenID Connect authentication + enabled: false + # The url to redirect clients to. Defaults to the configured frontend url. If you're using Vikunja with the official + # frontend, you don't need to change this value. + # **Note:** The redirect url must exactly match the configured redirect url with the third party provider. + # This includes all slashes at the end or protocols. + redirecturl: + # A list of enabled providers + providers: + # The name of the provider as it will appear in the frontend. + - name: + # The auth url to send users to if they want to authenticate using OpenID Connect. + authurl: + # The oidc logouturl that users will be redirected to on logout. + # Leave empty or delete key, if you do not want to be redirected. + logouturl: + # The client ID used to authenticate Vikunja at the OpenID Connect provider. + clientid: + # The client secret used to authenticate Vikunja at the OpenID Connect provider. + clientsecret: + +# Prometheus metrics endpoint +metrics: + # If set to true, enables a /metrics endpoint for prometheus to collect metrics about Vikunja. You can query it from `/api/v1/metrics`. + enabled: false + # If set to a non-empty value the /metrics endpoint will require this as a username via basic auth in combination with the password below. + username: + # If set to a non-empty value the /metrics endpoint will require this as a password via basic auth in combination with the username below. + password: + +# Provide default settings for new users. When a new user is created, these settings will automatically be set for the user. If you change them in the config file afterwards they will not be changed back for existing users. +defaultsettings: + # The avatar source for the user. Can be `gravatar`, `initials`, `upload` or `marble`. If you set this to `upload` you'll also need to specify `defaultsettings.avatar_file_id`. + avatar_provider: initials + # The id of the file used as avatar. + avatar_file_id: 0 + # If set to true users will get task reminders via email. + email_reminders_enabled: false + # If set to true will allow other users to find this user when searching for parts of their name. + discoverable_by_name: false + # If set to true will allow other users to find this user when searching for their exact email. + discoverable_by_email: false + # If set to true will send an email every day with all overdue tasks at a configured time. + overdue_tasks_reminders_enabled: true + # When to send the overdue task reminder email. + overdue_tasks_reminders_time: 9:00 + # The id of the default project. Make sure users actually have access to this project when setting this value. + default_project_id: 0 + # Start of the week for the user. `0` is sunday, `1` is monday and so on. + week_start: 0 + # The language of the user interface. Must be an ISO 639-1 language code. Will default to the browser language the user uses when signing up. + language: + # The time zone of each individual user. This will affect when users get reminders and overdue task emails. + timezone: