mirror of
https://github.com/thegeeklab/drone-admin.git
synced 2024-06-02 17:39:39 +02:00
Compare commits
91 Commits
Author | SHA1 | Date | |
---|---|---|---|
9a5e72acfa | |||
|
02f70f7311 | ||
|
7e74d6065a | ||
|
2371434ec7 | ||
|
f283cee9c8 | ||
b56ac89961 | |||
0de586e5dd | |||
b33e9e7759 | |||
1957d03e73 | |||
9a64659b33 | |||
f3789b2ec5 | |||
01ee4b905a | |||
f13ee75c2c | |||
|
ad035db364 | ||
|
7d0f8d561c | ||
|
e522c5281e | ||
|
13f6a9984e | ||
|
2f5383e94c | ||
|
98911913df | ||
|
bdbfd34b6e | ||
|
5cc22ffe97 | ||
|
933fc847e5 | ||
|
96ab645799 | ||
|
c5d39ed489 | ||
|
e35df09105 | ||
|
13b179d265 | ||
|
95bd42f39a | ||
|
29f9fc2cda | ||
|
ff5f04d088 | ||
|
9541ac2c4b | ||
|
cc6978c703 | ||
|
ae76b9ee4c | ||
|
1dd90a460c | ||
|
57d4e247bb | ||
|
86223c2d0f | ||
|
a625a788f2 | ||
|
4cb0be2740 | ||
|
a8d8ea50ce | ||
|
0e2a7bf9a0 | ||
|
e00e7bebe4 | ||
|
4f884d2230 | ||
|
7fb8e3856d | ||
|
df8a4f1b31 | ||
|
7331486f82 | ||
|
ee324f0306 | ||
|
fc10cf4565 | ||
|
3a3efddf4c | ||
|
fd966667de | ||
|
7471c3684d | ||
|
11b2009d37 | ||
4dade5bbf2 | |||
|
84d3f3b910 | ||
|
d98a9c8fc2 | ||
|
773f30b666 | ||
|
ff37d5d37c | ||
|
a93f108850 | ||
|
4199b4bef7 | ||
|
49ee50c4d1 | ||
|
cbad7180e7 | ||
|
bcf0d838cd | ||
|
a5f1399308 | ||
|
7cf48bfaea | ||
|
50b55935b6 | ||
|
3fcf1348fb | ||
|
d5e1c03cee | ||
|
a0a25f66d5 | ||
|
2937f6a6ce | ||
|
f90c369b3e | ||
|
1f3129c507 | ||
|
5c22e53e3c | ||
|
b214027173 | ||
|
978ca54147 | ||
|
2b8b48763f | ||
|
7f5f8d9f18 | ||
|
bb161bb45b | ||
|
5fce82736d | ||
|
2c9bb00bd6 | ||
|
615bfe9b1c | ||
|
47bb4fe94e | ||
|
eb941df28c | ||
f727219579 | |||
40b68f5cca | |||
|
64bf3cfccb | ||
|
c305a48145 | ||
db28a0858b | |||
|
5b1ee2a1b7 | ||
|
ac8b26dedd | ||
|
fc9af0ba2d | ||
|
20c1ebebc2 | ||
ad4351b366 | |||
0bd26d136e |
294
.drone.yml
294
.drone.yml
|
@ -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
|
||||
|
||||
...
|
113
.golangci.yml
113
.golangci.yml
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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>"
|
||||
|
|
10
Makefile
10
Makefile
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
18
go.mod
|
@ -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
34
go.sum
|
@ -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=
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["github>thegeeklab/renovate-presets:golang"]
|
||||
}
|
Loading…
Reference in New Issue
Block a user