0
0
mirror of https://github.com/thegeeklab/drone-admin.git synced 2024-06-02 17:39:39 +02:00

Compare commits

...

91 Commits
v0.3.0 ... main

Author SHA1 Message Date
9a5e72acfa
add deprecation notice 2023-08-29 21:37:11 +02:00
renovate[bot]
02f70f7311 chore(deps): update dependency golangci/golangci-lint to v1.54.2 2023-08-28 04:54:57 +00:00
renovate[bot]
7e74d6065a chore(docker): update golang:1.20 docker digest to 741d6f9 2023-08-17 10:00:35 +00:00
renovate[bot]
2371434ec7 chore(docker): update golang:1.20 docker digest to ee18a70 2023-08-17 03:36:56 +00:00
renovate[bot]
f283cee9c8 chore(deps): update dependency golangci/golangci-lint to v1.54.1 2023-08-14 04:15:51 +00:00
b56ac89961
debug ci 2023-08-11 09:44:24 +02:00
0de586e5dd
debug ci 2023-08-11 09:43:52 +02:00
b33e9e7759
debug ci 2023-08-11 09:41:02 +02:00
1957d03e73
debug ci 2023-08-11 09:37:16 +02:00
9a64659b33
debug ci 2023-08-11 09:35:29 +02:00
f3789b2ec5
debug ci 2023-08-11 09:35:00 +02:00
01ee4b905a
trigger ci 2023-08-10 21:38:19 +02:00
f13ee75c2c
test multiple registries 2023-08-10 21:35:57 +02:00
renovate[bot]
ad035db364 chore(docker): update golang:1.20 docker digest to 37c7d85 2023-08-10 03:49:53 +00:00
renovate[bot]
7d0f8d561c chore(docker): update alpine:3.18 docker digest to 7144f7b 2023-08-08 03:09:45 +00:00
renovate[bot]
e522c5281e chore(docker): update golang:1.20 docker digest to bc5f0b5 2023-08-02 01:39:02 +00:00
renovate[bot]
13f6a9984e chore(docker): update golang:1.20 docker digest to 010a0ff 2023-07-30 01:07:51 +00:00
renovate[bot]
2f5383e94c chore(docker): update golang:1.20 docker digest to 3952625 2023-07-29 07:18:20 +00:00
renovate[bot]
98911913df chore(docker): update golang:1.20 docker digest to cfc9d1b 2023-07-14 00:44:02 +00:00
renovate[bot]
bdbfd34b6e chore(docker): update golang:1.20 docker digest to 8e5a006 2023-07-12 01:13:51 +00:00
renovate[bot]
5cc22ffe97
fix(deps): update module golang.org/x/oauth2 to v0.10.0 (#106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-06 21:28:57 +02:00
renovate[bot]
933fc847e5 chore(docker): update golang:1.20 docker digest to fd9306e 2023-07-06 04:54:30 +00:00
renovate[bot]
96ab645799 chore(docker): update golang:1.20 docker digest to 20ee7c8 2023-07-05 13:14:55 +00:00
renovate[bot]
c5d39ed489 chore(docker): update golang:1.20 docker digest to ff2cca5 2023-07-05 06:28:09 +00:00
renovate[bot]
e35df09105 chore(docker): update golang:1.20 docker digest to 7954299 2023-07-05 00:29:43 +00:00
renovate[bot]
13b179d265 chore(docker): update golang:1.20 docker digest to 344193a 2023-06-24 07:45:02 +00:00
renovate[bot]
95bd42f39a chore(docker): update golang:1.20 docker digest to 8f958bf 2023-06-22 13:16:07 +00:00
renovate[bot]
29f9fc2cda chore(docker): update golang:1.20 docker digest to 9d0422f 2023-06-22 08:22:46 +00:00
renovate[bot]
ff5f04d088 chore(deps): update dependency golangci/golangci-lint to v1.53.3 2023-06-19 03:47:17 +00:00
renovate[bot]
9541ac2c4b chore(docker): update docker digests 2023-06-18 08:44:25 +00:00
renovate[bot]
cc6978c703 chore(docker): update golang:1.20 docker digest to 77df3d8 2023-06-14 10:05:46 +00:00
renovate[bot]
ae76b9ee4c chore(docker): update golang:1.20 docker digest to 02d4d88 2023-06-14 00:27:15 +00:00
renovate[bot]
1dd90a460c
fix(deps): update module golang.org/x/oauth2 to v0.9.0 (#93)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-13 22:16:39 +02:00
renovate[bot]
57d4e247bb chore(docker): update golang:1.20 docker digest to 4b1fc02 2023-06-07 01:59:53 +00:00
renovate[bot]
86223c2d0f
fix(deps): update module github.com/urfave/cli/v2 to v2.25.5 (#90)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-05 10:20:31 +02:00
renovate[bot]
a625a788f2
fix(deps): update module github.com/sirupsen/logrus to v1.9.3 (#89)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-05 10:00:35 +02:00
renovate[bot]
4cb0be2740
chore(deps): update dependency golangci/golangci-lint to v1.53.2 (#91)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Robert Kaussow <mail@thegeeklab.de>
2023-06-05 09:52:07 +02:00
renovate[bot]
a8d8ea50ce
chore(deps): update alpine docker tag to v3.18 (#84)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-28 15:28:28 +02:00
renovate[bot]
0e2a7bf9a0
fix(deps): update module github.com/urfave/cli/v2 to v2.25.4 (#75)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-28 15:20:22 +02:00
renovate[bot]
e00e7bebe4
fix(deps): update module github.com/sirupsen/logrus to v1.9.2 (#85)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-26 10:58:16 +02:00
renovate[bot]
4f884d2230 chore(docker): update golang:1.20 docker digest to 690e413 2023-05-24 06:37:29 +00:00
renovate[bot]
7fb8e3856d chore(docker): update golang:1.20 docker digest to 3f1f050 2023-05-24 01:17:44 +00:00
renovate[bot]
df8a4f1b31 chore(docker): update golang:1.20 docker digest to c6447e1 2023-05-23 12:34:39 +00:00
renovate[bot]
7331486f82
fix(deps): update module golang.org/x/oauth2 to v0.8.0 (#82)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-13 11:13:38 +02:00
renovate[bot]
ee324f0306 chore(docker): update golang:1.20 docker digest to 685a22e 2023-05-10 06:24:11 +00:00
renovate[bot]
fc10cf4565 chore(docker): update golang:1.20 docker digest to 31a8f92 2023-05-05 05:45:12 +00:00
renovate[bot]
3a3efddf4c chore(docker): update golang:1.20 docker digest to 4dd688d 2023-05-04 22:37:38 +00:00
renovate[bot]
fd966667de chore(docker): update golang:1.20 docker digest to c8e89fb 2023-05-04 10:56:12 +00:00
renovate[bot]
7471c3684d chore(docker): update golang:1.20 docker digest to 6876eff 2023-05-04 05:03:40 +00:00
renovate[bot]
11b2009d37 chore(docker): update golang:1.20 docker digest to eaf1267 2023-05-03 22:33:39 +00:00
4dade5bbf2
fix bare url in contribution file (#77) 2023-05-03 11:51:29 +02:00
renovate[bot]
84d3f3b910
fix(deps): update module github.com/urfave/cli/v2 to v2.25.1 (#66)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-14 09:00:20 +02:00
renovate[bot]
d98a9c8fc2
fix(deps): update module golang.org/x/oauth2 to v0.7.0 (#70)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-14 08:47:18 +02:00
renovate[bot]
773f30b666 chore(docker): update golang:1.20 docker digest to 403f486 2023-04-13 15:02:03 +00:00
renovate[bot]
ff37d5d37c chore(docker): update golang:1.20 docker digest to b9709ec 2023-04-13 05:14:55 +00:00
renovate[bot]
a93f108850 chore(docker): update golang:1.20 docker digest to 2fa5a28 2023-04-12 08:17:06 +00:00
renovate[bot]
4199b4bef7 chore(deps): update dependency mvdan/gofumpt to v0.5.0 2023-04-10 05:04:04 +00:00
renovate[bot]
49ee50c4d1 chore(docker): update golang:1.20 docker digest to 23050c2 2023-04-05 09:11:24 +00:00
renovate[bot]
cbad7180e7 chore(docker): update alpine:3.17 docker digest to 124c7d2 2023-03-29 23:22:04 +00:00
renovate[bot]
bcf0d838cd chore(docker): update golang:1.20 docker digest to f709934 2023-03-28 00:10:36 +00:00
renovate[bot]
a5f1399308 chore(deps): update dependency golangci/golangci-lint to v1.52.2 2023-03-27 00:50:40 +00:00
renovate[bot]
7cf48bfaea chore(docker): update golang:1.20 docker digest to 1724dc3 2023-03-25 08:12:39 +00:00
renovate[bot]
50b55935b6 chore(docker): update golang:1.20 docker digest to 80950aa 2023-03-24 08:16:29 +00:00
renovate[bot]
3fcf1348fb chore(docker): update golang:1.20 docker digest to 8114f4a 2023-03-24 02:30:54 +00:00
renovate[bot]
d5e1c03cee chore(docker): update golang:1.20 docker digest to a13b5e3 2023-03-23 20:53:20 +00:00
renovate[bot]
a0a25f66d5 chore(deps): update dependency golangci/golangci-lint to v1.52.0 2023-03-20 04:26:55 +00:00
renovate[bot]
2937f6a6ce chore(docker): update golang:1.20 docker digest to 5990c4f 2023-03-16 13:38:19 +00:00
renovate[bot]
f90c369b3e chore(docker): update alpine:3.17 docker digest to ff6bdca 2023-03-13 23:53:37 +00:00
renovate[bot]
1f3129c507
fix(deps): update module golang.org/x/oauth2 to v0.6.0 (#55) 2023-03-09 20:48:45 +01:00
renovate[bot]
5c22e53e3c chore(docker): update golang:1.20 docker digest to 74a3829 2023-03-08 06:06:38 +00:00
renovate[bot]
b214027173 chore(docker): update golang:1.20 docker digest to 52921e6 2023-03-02 13:20:13 +00:00
renovate[bot]
978ca54147 chore(docker): update golang:1.20 docker digest to a83a6a3 2023-03-01 16:12:07 +00:00
renovate[bot]
2b8b48763f chore(deps): update dependency golangci/golangci-lint to v1.51.2 2023-02-27 05:20:00 +00:00
renovate[bot]
7f5f8d9f18 chore(docker): update golang:1.20 docker digest to 2edf6aa 2023-02-16 09:54:53 +00:00
renovate[bot]
bb161bb45b chore(docker): update golang:1.20 docker digest to 9911e93 2023-02-15 05:58:43 +00:00
renovate[bot]
5fce82736d
fix(deps): update module golang.org/x/oauth2 to v0.5.0 (#44) 2023-02-12 14:51:01 +01:00
renovate[bot]
2c9bb00bd6 chore(docker): update docker digests 2023-02-11 11:34:58 +00:00
renovate[bot]
615bfe9b1c chore(docker): update golang:1.20 docker digest to 53b7958 2023-02-10 06:31:34 +00:00
renovate[bot]
47bb4fe94e chore(docker): update golang:1.20 docker digest to 07253da 2023-02-10 02:46:17 +00:00
renovate[bot]
eb941df28c chore(docker): update golang:1.20 docker digest to 6e835db 2023-02-09 19:44:42 +00:00
f727219579
ci: bump container build plugin to drone-docker-buildx:23 (#43) 2023-02-09 08:54:26 +01:00
40b68f5cca
fix drone-matrix template (#42) 2023-02-08 17:17:01 +01:00
renovate[bot]
64bf3cfccb
fix(deps): update module github.com/joho/godotenv to v1.5.1 (#37) 2023-02-08 11:07:44 +01:00
renovate[bot]
c305a48145
chore(deps): update golang docker tag to v1.20 (#36) 2023-02-08 10:24:09 +01:00
db28a0858b
refactor: add more linters and fix findings (#41) 2023-02-08 10:16:05 +01:00
renovate[bot]
5b1ee2a1b7 chore(docker): update golang:1.19 docker digest to 09009d4 2023-02-05 15:27:53 +00:00
renovate[bot]
ac8b26dedd chore(docker): update golang:1.19 docker digest to 101204a 2023-02-05 06:33:49 +00:00
renovate[bot]
fc9af0ba2d chore(docker): update golang:1.19 docker digest to 9e577b0 2023-02-04 16:48:38 +00:00
renovate[bot]
20c1ebebc2
fix(deps): update module github.com/urfave/cli/v2 to v2.24.3 (#35) 2023-02-03 08:47:47 +01:00
ad4351b366
ci: replace outdated gh-pages plugin (#34) 2023-01-14 23:21:23 +01:00
0bd26d136e
unify makefile syntax (#33) 2023-01-14 22:59:19 +01:00
16 changed files with 236 additions and 435 deletions

View File

@ -1,294 +0,0 @@
---
kind: pipeline
name: test
platform:
os: linux
arch: amd64
steps:
- name: deps
image: golang:1.19
commands:
- make deps
volumes:
- name: godeps
path: /go
- name: lint
image: golang:1.19
commands:
- make lint
volumes:
- name: godeps
path: /go
- name: test
image: golang:1.19
commands:
- make test
volumes:
- name: godeps
path: /go
volumes:
- name: godeps
temp: {}
trigger:
ref:
- refs/heads/main
- refs/tags/**
- refs/pull/**
---
kind: pipeline
name: build-binaries
platform:
os: linux
arch: amd64
steps:
- name: build
image: techknowlogick/xgo:go-1.19.x
commands:
- ln -s /drone/src /source
- make release
- name: executable
image: alpine
commands:
- $(find dist/ -executable -type f -iname ${DRONE_REPO_NAME}-linux-amd64) --help
- name: changelog-generate
image: thegeeklab/git-chglog
commands:
- git fetch -tq
- git-chglog --no-color --no-emoji -o CHANGELOG.md ${DRONE_TAG:---next-tag unreleased unreleased}
- name: changelog-format
image: thegeeklab/alpine-tools
commands:
- prettier CHANGELOG.md
- prettier -w CHANGELOG.md
- name: publish
image: plugins/github-release
settings:
api_key:
from_secret: github_token
files:
- dist/*
note: CHANGELOG.md
overwrite: true
title: ${DRONE_TAG}
when:
ref:
- refs/tags/**
trigger:
ref:
- refs/heads/main
- refs/tags/**
- refs/pull/**
depends_on:
- test
---
kind: pipeline
name: build-container
platform:
os: linux
arch: amd64
steps:
- name: dryrun
image: thegeeklab/drone-docker-buildx:20
settings:
dockerfile: Dockerfile.multiarch
dry_run: true
platforms:
- linux/amd64
- linux/arm64
- linux/arm/v7
- linux/arm/v6
provenance: false
repo: thegeeklab/${DRONE_REPO_NAME}
when:
ref:
- refs/pull/**
- name: publish-dockerhub
image: thegeeklab/drone-docker-buildx:20
settings:
auto_tag: true
dockerfile: Dockerfile.multiarch
password:
from_secret: docker_password
platforms:
- linux/amd64
- linux/arm64
- linux/arm/v7
- linux/arm/v6
provenance: false
repo: thegeeklab/${DRONE_REPO_NAME}
username:
from_secret: docker_username
when:
ref:
- refs/heads/main
- refs/tags/**
depends_on:
- dryrun
- name: publish-quay
image: thegeeklab/drone-docker-buildx:20
settings:
auto_tag: true
dockerfile: Dockerfile.multiarch
password:
from_secret: quay_password
platforms:
- linux/amd64
- linux/arm64
- linux/arm/v7
- linux/arm/v6
provenance: false
registry: quay.io
repo: quay.io/thegeeklab/${DRONE_REPO_NAME}
username:
from_secret: quay_username
when:
ref:
- refs/heads/main
- refs/tags/**
depends_on:
- dryrun
trigger:
ref:
- refs/heads/main
- refs/tags/**
- refs/pull/**
depends_on:
- test
---
kind: pipeline
name: docs
platform:
os: linux
arch: amd64
concurrency:
limit: 1
steps:
- name: markdownlint
image: thegeeklab/markdownlint-cli
commands:
- markdownlint 'docs/content/**/*.md' 'README.md' 'CONTRIBUTING.md'
- name: spellcheck
image: thegeeklab/alpine-tools
commands:
- spellchecker --files '_docs/**/*.md' 'README.md' 'CONTRIBUTING.md' -d .dictionary -p spell indefinite-article syntax-urls --no-suggestions
environment:
FORCE_COLOR: true
NPM_CONFIG_LOGLEVEL: error
- name: publish
image: plugins/gh-pages
settings:
pages_directory: _docs/
password:
from_secret: github_token
target_branch: docs
username:
from_secret: github_username
when:
ref:
- refs/heads/main
trigger:
ref:
- refs/heads/main
- refs/tags/**
- refs/pull/**
depends_on:
- build-binaries
- build-container
---
kind: pipeline
name: notifications
platform:
os: linux
arch: amd64
steps:
- name: pushrm-dockerhub
image: chko/docker-pushrm:1
environment:
DOCKER_PASS:
from_secret: docker_password
DOCKER_USER:
from_secret: docker_username
PUSHRM_FILE: README.md
PUSHRM_SHORT: Drone Admin Tools
PUSHRM_TARGET: thegeeklab/${DRONE_REPO_NAME}
when:
status:
- success
- name: pushrm-quay
image: chko/docker-pushrm:1
environment:
APIKEY__QUAY_IO:
from_secret: quay_token
PUSHRM_FILE: README.md
PUSHRM_TARGET: quay.io/thegeeklab/${DRONE_REPO_NAME}
when:
status:
- success
- name: matrix
image: thegeeklab/drone-matrix
settings:
homeserver:
from_secret: matrix_homeserver
password:
from_secret: matrix_password
roomid:
from_secret: matrix_roomid
template: "Status: **{{ build.Status }}**<br/> Build: [{{ repo.Owner }}/{{ repo.Name }}]({{ build.Link }}){{#if build.Branch}} ({{ build.Branch }}){{/if}} by {{ commit.Author }}<br/> Message: {{ commit.Message.Title }}"
username:
from_secret: matrix_username
when:
status:
- success
- failure
trigger:
ref:
- refs/heads/main
- refs/tags/**
status:
- success
- failure
depends_on:
- docs
---
kind: signature
hmac: fe8e83619566fffc192a7f365503b31b409e7701a454e41a34f1e13ce3ec9e20
...

View File

@ -1,25 +1,91 @@
linters:
enable:
- gosimple
- deadcode
- typecheck
- govet
- errcheck
- staticcheck
- unused
- structcheck
- varcheck
- dupl
- gofmt
- misspell
- gocritic
- bidichk
- ineffassign
- revive
- gofumpt
- depguard
enable-all: false
disable-all: true
enable:
- errcheck
- gosimple
- govet
- ineffassign
- staticcheck
- typecheck
- unused
- asasalint
- asciicheck
- bidichk
- bodyclose
- containedctx
- contextcheck
- decorder
- dogsled
- dupl
- dupword
- durationcheck
- errchkjson
- errname
- errorlint
- execinquery
- exhaustive
- exportloopref
- forcetypeassert
- ginkgolinter
- gocheckcompilerdirectives
- gochecknoglobals
- gochecknoinits
- gocognit
- goconst
- gocritic
- gocyclo
- godot
- godox
- goerr113
- gofmt
- gofumpt
- goheader
- goimports
- gomnd
- gomoddirectives
- gomodguard
- goprintffuncname
- gosec
- grouper
- importas
- interfacebloat
- ireturn
- lll
- loggercheck
- maintidx
- makezero
- misspell
- musttag
- nakedret
- nestif
- nilerr
- nilnil
- nlreturn
- noctx
- nolintlint
- nonamedreturns
- nosprintfhostport
- prealloc
- predeclared
- promlinter
- reassign
- revive
# - rowserrcheck
# - sqlclosecheck
# - structcheck
- stylecheck
- tagliatelle
- tenv
- testableexamples
- thelper
- tparallel
- unconvert
- unparam
- usestdlibvars
# - wastedassign
- whitespace
- wsl
fast: false
run:
@ -28,4 +94,11 @@ run:
linters-settings:
gofumpt:
extra-rules: true
lang-version: "1.18"
lang-version: "1.20"
ireturn:
allow:
- anon
- error
- empty
- stdlib
- drone.Client

View File

@ -3,7 +3,7 @@
## Security
If you think you have found a **security issue**, please do not mention it in this repository.
Instead, send an email to security@thegeeklab.de with as many details as possible so it can be handled confidential.
Instead, send an email to `security@thegeeklab.de` with as many details as possible so it can be handled confidential.
## Bug Reports and Feature Requests

View File

@ -1,4 +1,4 @@
FROM --platform=$BUILDPLATFORM golang:1.19@sha256:bb9811fad43a7d6fd2173248d8331b2dcf5ac9af20976b1937ecd214c5b8c383 as build
FROM --platform=$BUILDPLATFORM golang:1.20@sha256:741d6f9bcab778441efe05c8e4369d4f8ff56c9a635a97d77f55d8b0ec62f907 as build
ARG TARGETOS
ARG TARGETARCH
@ -9,7 +9,7 @@ WORKDIR /src
RUN make build
FROM alpine:3.17@sha256:f271e74b17ced29b915d351685fd4644785c6d1559dd1f2d4189a5e851ef753a
FROM alpine:3.18@sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a
LABEL maintainer="Robert Kaussow <mail@thegeeklab.de>"
LABEL org.opencontainers.image.authors="Robert Kaussow <mail@thegeeklab.de>"

View File

@ -1,7 +1,7 @@
# renovate: datasource=github-releases depName=mvdan/gofumpt
GOFUMPT_PACKAGE_VERSION := v0.4.0
GOFUMPT_PACKAGE_VERSION := v0.5.0
# renovate: datasource=github-releases depName=golangci/golangci-lint
GOLANGCI_LINT_PACKAGE_VERSION := v1.50.1
GOLANGCI_LINT_PACKAGE_VERSION := v1.54.2
EXECUTABLE := drone-admin
@ -19,7 +19,7 @@ GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@$(G
XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest
GENERATE ?=
XGO_VERSION := go-1.19.x
XGO_VERSION := go-1.20.x
XGO_TARGETS ?= linux/amd64,linux/arm64,linux/arm-6,linux/arm-7
TARGETOS ?= linux
@ -74,14 +74,14 @@ test:
build: $(DIST)/$(EXECUTABLE)
$(DIST)/$(EXECUTABLE): $(SOURCES)
GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=$(GOARM) $(GO) build -v -tags '$(TAGS)' -ldflags '-extldflags "-static" $(LDFLAGS)' -o $@ ./cmd/$(EXECUTABLE)
GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) GOARM=$(GOARM) $(GO) build -v -tags '$(TAGS)' -ldflags '-extldflags "-static" $(LDFLAGS)' -o $@ ./cmd/$(EXECUTABLE)
$(DIST_DIRS):
mkdir -p $(DIST_DIRS)
.PHONY: xgo
xgo: | $(DIST_DIRS)
GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=$(GOARM) $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -v -ldflags '-extldflags "-static" $(LDFLAGS)' -tags '$(TAGS)' -targets '$(XGO_TARGETS)' -out $(EXECUTABLE) --pkg cmd/$(EXECUTABLE) .
GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) GOARM=$(GOARM) $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -v -ldflags '-extldflags "-static" $(LDFLAGS)' -tags '$(TAGS)' -targets '$(XGO_TARGETS)' -out $(EXECUTABLE) --pkg cmd/$(EXECUTABLE) .
cp /build/* $(CWD)/$(DIST)
ls -l $(CWD)/$(DIST)

View File

@ -1,6 +1,6 @@
# drone-admin
Drone Admin Tools
DISCONTINUED: Drone Admin Tools
[![Build Status](https://img.shields.io/drone/build/thegeeklab/drone-admin?logo=drone&server=https%3A%2F%2Fdrone.thegeeklab.de)](https://drone.thegeeklab.de/thegeeklab/drone-admin)
[![Docker Hub](https://img.shields.io/badge/dockerhub-latest-blue.svg?logo=docker&logoColor=white)](https://hub.docker.com/r/thegeeklab/drone-admin)
@ -10,6 +10,8 @@ Drone Admin Tools
[![Source: GitHub](https://img.shields.io/badge/source-github-blue.svg?logo=github&logoColor=white)](https://github.com/thegeeklab/drone-admin)
[![License: Apache-2.0](https://img.shields.io/github/license/thegeeklab/drone-admin)](https://github.com/thegeeklab/drone-admin/blob/main/LICENSE)
> **DISCONTINUED:** As I don't use Drone CI anymore, this project is unmaintained. If you are interested in a free and open source CI system check out [Woodpecker CI](https://woodpecker-ci.org/).
Admin Tools for [Drone](https://github.com/drone/drone). You can find the full documentation at [https://drone-plugin-index.geekdocs.de](https://drone-plugin-index.geekdocs.de/tools/drone-admin).
## Contributors

View File

@ -2,10 +2,12 @@ package autoscaler
import "github.com/urfave/cli/v2"
var Command = &cli.Command{
Name: "autoscaler",
Usage: "manage autoscaler",
Subcommands: []*cli.Command{
&autoscalerReaperCmd,
},
func GetAutoscalerCmd() *cli.Command {
return &cli.Command{
Name: "autoscaler",
Usage: "manage autoscaler",
Subcommands: []*cli.Command{
getReaperCmd(),
},
}
}

View File

@ -11,24 +11,28 @@ import (
"github.com/urfave/cli/v2"
)
var autoscalerReaperCmd = cli.Command{
Name: "reaper",
Usage: "find and kill agents in error state",
Action: autoscalerReaper,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "state-file",
Usage: "state file",
EnvVars: []string{"DRONE_ADMIN_AUTOSCALER_REAPER_STATE_FILE"},
Value: "/tmp/droneclean.gob",
func getReaperCmd() *cli.Command {
return &cli.Command{
Name: "reaper",
Usage: "find and kill agents in error state",
Action: reaper,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "state-file",
Usage: "state file",
EnvVars: []string{"DRONE_ADMIN_AUTOSCALER_REAPER_STATE_FILE"},
Value: "/tmp/droneclean.gob",
},
},
},
}
}
func autoscalerReaper(c *cli.Context) error {
statefile := c.String("state-file")
scaler := c.StringSlice("server")
dry := c.Bool("dry-run")
func reaper(ctx *cli.Context) error {
const maxRetries = 3
statefile := ctx.String("state-file")
scaler := ctx.StringSlice("server")
dry := ctx.Bool("dry-run")
state := map[string]int{}
force := false
@ -44,7 +48,7 @@ func autoscalerReaper(c *cli.Context) error {
}
for _, scaler := range scaler {
client, err := client.New(scaler, c.String("token"))
client, err := client.New(scaler, ctx.String("token"))
if err != nil {
return err
}
@ -53,6 +57,7 @@ func autoscalerReaper(c *cli.Context) error {
if err != nil {
return err
}
serversAll := len(servers)
servers = util.Filter(servers, func(s *drone.Server) bool {
return s.State == "running"
@ -65,25 +70,26 @@ func autoscalerReaper(c *cli.Context) error {
}
logrus.WithFields(searchFields).Infof("lookup agents in error state")
for _, s := range servers {
state[s.Name]++
triage := state[s.Name]
for _, server := range servers {
state[server.Name]++
triage := state[server.Name]
if state[s.Name] == 3 {
if state[server.Name] == maxRetries {
force = true
delete(state, s.Name)
delete(state, server.Name)
}
foundFields := logrus.Fields{
"server": scaler,
"agent": s.Name,
"agent": server.Name,
"triage": triage,
"force": force,
}
logrus.WithFields(foundFields).Infof("destroy agent")
if !dry {
err = serverDestroy(client, s.Name, force)
err = serverDestroy(client, server.Name, force)
if err != nil && !strings.Contains(err.Error(), "client error 404") {
return err
}

View File

@ -2,10 +2,12 @@ package build
import "github.com/urfave/cli/v2"
var Command = &cli.Command{
Name: "build",
Usage: "manage build",
Subcommands: []*cli.Command{
&buidPruneCmd,
},
func GetBuildCmd() *cli.Command {
return &cli.Command{
Name: "build",
Usage: "manage build",
Subcommands: []*cli.Command{
getPruneCmd(),
},
}
}

View File

@ -11,29 +11,34 @@ import (
"github.com/urfave/cli/v2"
)
var buidPruneCmd = cli.Command{
Name: "prune",
Usage: "prune builds",
ArgsUsage: "<repo/name>",
Action: buidPrune,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "older-than",
Usage: "remove builds older than the specified time limit",
EnvVars: []string{"DRONE_ADMIN_BUILD_PRUNE_OLDER_THAN"},
Required: true,
const DroneClientPageSize = 50
func getPruneCmd() *cli.Command {
return &cli.Command{
Name: "prune",
Usage: "prune builds",
ArgsUsage: "<repo/name>",
Action: prune,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "older-than",
Usage: "remove builds older than the specified time limit",
EnvVars: []string{"DRONE_ADMIN_BUILD_PRUNE_OLDER_THAN"},
Required: true,
},
&cli.IntFlag{
Name: "keep-min",
Usage: "minimum number of builds to keep",
EnvVars: []string{"DRONE_ADMIN_BUILD_PRUNE_KEEP_MIN"},
//nolint:gomnd
Value: 10,
},
},
&cli.IntFlag{
Name: "keep-min",
Usage: "minimum number of builds to keep",
EnvVars: []string{"DRONE_ADMIN_BUILD_PRUNE_KEEP_MIN"},
Value: 10,
},
},
}
}
func buidPrune(c *cli.Context) error {
client, err := client.New(c.StringSlice("server")[0], c.String("token"))
func prune(ctx *cli.Context) error {
client, err := client.New(ctx.StringSlice("server")[0], ctx.String("token"))
if err != nil {
return err
}
@ -43,11 +48,11 @@ func buidPrune(c *cli.Context) error {
return err
}
dur := c.String("older-than")
keep := c.Int("keep-min")
dry := c.Bool("dry-run")
buildDuration := ctx.String("older-than")
buildMin := ctx.Int("keep-min")
dry := ctx.Bool("dry-run")
duration, err := time.ParseDuration(dur)
duration, err := time.ParseDuration(buildDuration)
if err != nil {
return err
}
@ -56,10 +61,10 @@ func buidPrune(c *cli.Context) error {
logrus.Info("dry-run enabled, no data will be removed")
}
logrus.Infof("prune builds older than %v, keep min %v", dur, keep)
logrus.Infof("prune builds older than %v, keep min %v", buildDuration, buildMin)
for _, r := range repos {
builds, err := getBuilds(client, r)
for _, repo := range repos {
builds, err := getBuilds(client, repo)
if err != nil {
return err
}
@ -68,24 +73,23 @@ func buidPrune(c *cli.Context) error {
return builds[i].Number > builds[j].Number
})
if bl := len(builds); bl > 0 && bl > keep {
builds = builds[keep:]
if buildCount := len(builds); buildCount > 0 && buildCount > buildMin {
builds = builds[buildMin:]
builds = util.Filter(builds, func(b *drone.Build) bool {
return time.Since(time.Unix(b.Created, 0)) > duration
})
logrus.Infof("prune %v/%v builds from '%v'", len(builds), bl, r.Slug)
logrus.Infof("prune %v/%v builds from '%v'", len(builds), buildCount, repo.Slug)
if !dry && len(builds) > 0 {
err := client.BuildPurge(r.Namespace, r.Name, int(builds[0].Number+1))
err := client.BuildPurge(repo.Namespace, repo.Name, int(builds[0].Number+1))
if err != nil {
return err
}
}
} else {
logrus.Infof("skip '%v', number of %v builds lower than min value", r.Slug, len(builds))
logrus.Infof("skip '%v', number of %v builds lower than min value", repo.Slug, len(builds))
}
}
return nil
@ -96,21 +100,21 @@ func getRepos(client drone.Client) ([]*drone.Repo, error) {
repos := make([]*drone.Repo, 0)
for {
r, err := client.RepoListAll(drone.ListOptions{Page: page, Size: 50})
repo, err := client.RepoListAll(drone.ListOptions{Page: page, Size: DroneClientPageSize})
if err != nil {
return nil, err
}
if len(r) == 0 {
if len(repo) == 0 {
break
}
repos = append(repos, r...)
repos = append(repos, repo...)
page++
}
repos = util.Filter(repos, func(r *drone.Repo) bool {
return r.Active
repos = util.Filter(repos, func(repo *drone.Repo) bool {
return repo.Active
})
return repos, nil
@ -121,17 +125,18 @@ func getBuilds(client drone.Client, repo *drone.Repo) ([]*drone.Build, error) {
builds := make([]*drone.Build, 0)
for {
b, err := client.BuildList(repo.Namespace, repo.Name, drone.ListOptions{Page: page, Size: 50})
build, err := client.BuildList(repo.Namespace, repo.Name, drone.ListOptions{Page: page, Size: DroneClientPageSize})
if err != nil {
return nil, err
}
if len(b) == 0 {
if len(build) == 0 {
break
}
builds = append(builds, b...)
builds = append(builds, build...)
page++
}
return builds, nil
}

View File

@ -13,12 +13,13 @@ import (
)
func New(server, token string) (drone.Client, error) {
s, err := url.Parse(server)
serverURL, err := url.Parse(server)
if err != nil {
return nil, err
}
if len(s.Scheme) == 0 {
s.Scheme = "http"
if len(serverURL.Scheme) == 0 {
serverURL.Scheme = "http"
}
// attempt to find system CA certs
@ -26,6 +27,7 @@ func New(server, token string) (drone.Client, error) {
tlsConfig := &tls.Config{
RootCAs: certs,
InsecureSkipVerify: false,
MinVersion: tls.VersionTLS12,
}
oauth := new(oauth2.Config)
@ -44,5 +46,5 @@ func New(server, token string) (drone.Client, error) {
Proxy: http.ProxyFromEnvironment,
}
return drone.NewClient(s.String(), authenticator), nil
return drone.NewClient(serverURL.String(), authenticator), nil
}

View File

@ -7,11 +7,13 @@ import (
func Filter[T any](vs []T, f func(T) bool) []T {
filtered := make([]T, 0)
for _, v := range vs {
if f(v) {
filtered = append(filtered, v)
}
}
return filtered
}
@ -21,7 +23,9 @@ func WriteGob(filePath string, object interface{}) error {
encoder := gob.NewEncoder(file)
err = encoder.Encode(object)
}
file.Close()
return err
}
@ -31,6 +35,8 @@ func ReadGob(filePath string, object interface{}) error {
decoder := gob.NewDecoder(file)
err = decoder.Decode(object)
}
file.Close()
return err
}

View File

@ -13,6 +13,7 @@ import (
"github.com/urfave/cli/v2"
)
//nolint:gochecknoglobals
var (
BuildVersion = "devel"
BuildDate = "00000000"
@ -69,8 +70,8 @@ func main() {
return nil
},
Commands: []*cli.Command{
build.Command,
autoscaler.Command,
build.GetBuildCmd(),
autoscaler.GetAutoscalerCmd(),
},
}

18
go.mod
View File

@ -1,23 +1,23 @@
module github.com/thegeeklab/drone-admin
go 1.19
go 1.20
require (
github.com/drone/drone-go v1.7.1
github.com/jackspirou/syscerts v0.0.0-20160531025014-b68f5469dff1
github.com/joho/godotenv v1.4.0
github.com/sirupsen/logrus v1.9.0
github.com/urfave/cli/v2 v2.23.7
golang.org/x/oauth2 v0.4.0
github.com/joho/godotenv v1.5.1
github.com/sirupsen/logrus v1.9.3
github.com/urfave/cli/v2 v2.25.5
golang.org/x/oauth2 v0.10.0
)
require (
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
golang.org/x/net v0.5.0 // indirect
golang.org/x/sys v0.4.0 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sys v0.10.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.28.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
)

34
go.sum
View File

@ -8,38 +8,38 @@ github.com/drone/drone-go v1.7.1 h1:ZX+3Rs8YHUSUQ5mkuMLmm1zr1ttiiE2YGNxF3AnyDKw=
github.com/drone/drone-go v1.7.1/go.mod h1:fxCf9jAnXDZV1yDr0ckTuWd1intvcQwfJmTRpTZ1mXg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/jackspirou/syscerts v0.0.0-20160531025014-b68f5469dff1 h1:9Xm8CKtMZIXgcopfdWk/qZ1rt0HjMgfMR9nxxSeK6vk=
github.com/jackspirou/syscerts v0.0.0-20160531025014-b68f5469dff1/go.mod h1:zuHl3Hh+e9P6gmBPvcqR1HjkaWHC/csgyskg6IaFKFo=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/urfave/cli/v2 v2.23.7 h1:YHDQ46s3VghFHFf1DdF+Sh7H4RqhcM+t0TmZRJx4oJY=
github.com/urfave/cli/v2 v2.23.7/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
github.com/urfave/cli/v2 v2.25.5 h1:d0NIAyhh5shGscroL7ek/Ya9QYQE0KNabJgiUinIQkc=
github.com/urfave/cli/v2 v2.25.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M=
golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8=
golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -48,8 +48,8 @@ google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

View File

@ -1,4 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["github>thegeeklab/renovate-presets:golang"]
}