diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 43392807c3d88aed530af1314dbec75879e5257c..1bc73eba216c2846550f8a2aa3d5d4edd2ef464f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,16 +7,12 @@ image: docker-registry.schukai.com:443/nixos-ci-devenv:latest -services: - - docker:dind - variables: # The repo name as used in # https://github.com/nix-community/NUR/blob/master/repos.json NIXOS_VERSION: "23.05" NIXPKGS_ALLOW_UNFREE: "1" NIXPKGS_ALLOW_INSECURE: "1" - DOCKER_DRIVER: overlay2 GIT_DEPTH: 10 stages: @@ -24,8 +20,6 @@ stages: - deploy before_script: - - nix shell nixpkgs#coreutils-full -c mkdir -p /certs/client/ - - nix shell nixpkgs#coreutils-full -c ln -fs /etc/ssl/certs/ca-bundle.crt /certs/client/ca.pem - echo > .env-gitlab-ci - variables=("HOME=$HOME" "CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME" "CI_REPOSITORY_URL=$CI_REPOSITORY_URL" "GITLAB_TOKEN=$GITLAB_TOKEN" "CI_JOB_TOKEN=$CI_JOB_TOKEN" "GITLAB_USER_EMAIL=$GITLAB_USER_EMAIL" "GITLAB_USER_NAME=\"$GITLAB_USER_NAME\"" "CI_REGISTRY_USER=$CI_REGISTRY_USER" "CI_PROJECT_ID=$CI_PROJECT_ID" "CI_PROJECT_DIR=$CI_PROJECT_DIR" "CI_API_V4_URL=$CI_API_V4_URL" "CI_PROJECT_NAME=$CI_PROJECT_NAME" "CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA"); for var in "${variables[@]}"; do echo "$var" >> .env-gitlab-ci; done - cat .env-gitlab-ci @@ -63,7 +57,3 @@ deploy: paths: - /nix/store - - artifacts: - paths: - - dist diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..2713a857d50d9b7ea2e90606657b251583e4bca7 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,58 @@ +# Contributing to schukai GmbH Projects + +## Code of Conduct + +Be a human, not an asshole. Common sense and basic human decency apply. + +## Getting Started + +### Setting up the Project + +1. Fork the project on GitLab. +2. Clone your fork locally. Replace `[your-username]` with your GitLab username and `[project-name]` with the actual project name: + ```bash + git clone $(git config --get remote.origin.url) + ``` +3. Add the upstream repository. Replace `[original-username]` and `[project-name]` with the original repository's username and project name: + ```bash + git remote add upstream https://gitlab.schukai.com/[original-username]/[project-name].git + ``` + +### Making Changes + +1. Create a new branch: + ```bash + git checkout -b new-feature-branch + ``` +2. Make your changes. +3. Commit your changes: + ```bash + git commit -m "Description of change" + ``` + +### Submitting a Merge Request + +1. Push your changes to your fork: + ```bash + git push origin new-feature-branch + ``` +2. Navigate to the original project repository on `gitlab.schukai.com`. +3. Open a Merge Request and provide a clear description of the changes. + +## Coding Guidelines + +- Follow the coding style used in the project. +- Write unit tests for new features. +- Ensure that all tests pass before submitting a Merge Request. + +## Reporting Issues + +If you find an issue, please create a new issue on `gitlab.schukai.com`. + +## Additional Resources + +- [GitLab Flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html) +- [GitLab Merge Request Guidelines](https://docs.gitlab.com/ee/user/project/merge_requests/) + +Thank you for your contribution! + diff --git a/LICENSE b/LICENSE index 8aa3080082f117124214e2d4c96b5f14d6fbf54c..5694d302432e91a1be35bb39ea0a4bad0fe1cc17 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2022 by schukai GmbH. +Copyright (C) 2023 schukai GmbH This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published @@ -10,5 +10,5 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License -along with this program. If not, see <https://www.gnu.org/licenses/>. - +along with this program. If not, see <https://www.gnu.org/licenses/>. + diff --git a/Taskfile.yml b/Taskfile.yml index b7313f4d13319627727838e8df5302c52eefc042..b48a18a1f7c7a047e8f4dde1a7d02a53d8b6fcd4 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -10,24 +10,29 @@ version: '3' tasks: - default: + default: cmds: - task --list silent: true test: desc: Execute unit tests in Go. + env: + TEST_BY_TASK: true cmds: - echo "Execute unit tests in Go." - - go test -cover -v ./... - - go test -bench -v ./... - - go test -race -v ./... + - gosec . + - go test -tags=runOnTask -cover -v ./... + - go test -tags=runOnTask -bench -v ./... + - go test -tags=runOnTask -race -v ./... test-fuzz: desc: Conduct fuzzing tests.# + env: + TEST_BY_TASK: true cmds: - echo "Conduct fuzzing tests." - - go test -v -fuzztime=30s -fuzz=Fuzz ./... + - go test -tags=runOnTask -v -fuzztime=30s -fuzz=Fuzz ./... add-licenses: desc: Attach license headers to Go files. diff --git a/devenv.nix b/devenv.nix index efd4d9b7b93079d1aa4247ee0d940d5fe8f465b6..5fdd16fc881ee44b44ef65da1bde82d539b83d8a 100644 --- a/devenv.nix +++ b/devenv.nix @@ -1,4 +1,4 @@ -{ pkgs, inputs, phps, lib, config, modulesPath, ... }: +{ pkgs ? import <nixpkgs> {}, inputs, phps, lib, config, modulesPath, ... }: { # https://devenv.sh/packages/ @@ -9,12 +9,14 @@ blackbox-terminal coreutils-full dbeaver + dbeaver delve dialog drill exa fd fd + feh gcc12 gdlv git @@ -23,6 +25,7 @@ gnumake gnused go-licenses + gosec go-task gum httpie @@ -34,6 +37,8 @@ memcached netcat nixfmt + nodePackages.mermaid-cli + openssh procps ranger unixtools.xxd @@ -48,7 +53,7 @@ languages = { go = { enable = true; }; }; difftastic.enable = true; - + scripts.get-go-default-packages.exec = '' #!${pkgs.bash}/bin/bash echo $(awk -F ' ' '/^module / { print $2 }' go.mod) @@ -60,7 +65,7 @@ #!${pkgs.bash}/bin/bash #set -euo pipefail set -x - + PATH="''${PATH}":${pkgs.coreutils}/bin PATH="''${PATH}":${pkgs.findutils}/bin PATH="''${PATH}":${pkgs.jq}/bin/ @@ -161,142 +166,213 @@ ''; enterShell = '' - - cat <<'EOF' > Taskfile.yml - - # THIS FILE IS AUTOGENERATED BY THE DEVENVSHELL - # DO NOT EDIT THIS FILE MANUALLY - # INSTEAD EDIT THE DEVENVSHELL CONFIGURATION FILE devenv.nix - # AND OPEN A SHELL WITH THE COMMAND devenv shell - # - # Information about the task runner can be found here: - # https://taskfile.dev - - version: '3' - - tasks: - default: - cmds: - - task --list - silent: true - - test: - desc: Execute unit tests in Go. - cmds: - - echo "Execute unit tests in Go." - - go test -cover -v ./... - - go test -bench -v ./... - - go test -race -v ./... - - test-fuzz: - desc: Conduct fuzzing tests.# - cmds: - - echo "Conduct fuzzing tests." - - go test -v -fuzztime=30s -fuzz=Fuzz ./... - - add-licenses: - desc: Attach license headers to Go files. - cmds: - - echo "Attach license headers to Go files." - - go install github.com/google/addlicense@latest - - addlicense -c "schukai GmbH" -s -l "AGPL-3.0" ./*.go - silent: true - - check-licenses: - desc: Check license headers of Go files. - silent: true - cmds: - - go-licenses save "$(get-go-default-packages)" --ignore "gitlab.schukai.com" --force --save_path ''${DEVENV_ROOT}/licenses/ - - check: - desc: Confirm repository status. - cmds: - - git diff-index --quiet HEAD || (echo "There are uncommitted changes after running make. Please commit or stash them before running make."; exit 1) - silent: true - - commit: - desc: Commit changes to the repository. - aliases: - - c - - ci - - git-commit - cmds: - - do-git-commit - EOF - - cat <<'EOF' > .gitlab-ci.yml - - # THIS FILE IS AUTOGENERATED BY THE DEVENVSHELL - # DO NOT EDIT THIS FILE MANUALLY - # INSTEAD EDIT THE DEVENVSHELL CONFIGURATION FILE devenv.nix - # AND OPEN A SHELL WITH THE COMMAND devenv shell - # - - image: docker-registry.schukai.com:443/nixos-ci-devenv:latest - - services: - - docker:dind - - variables: - # The repo name as used in - # https://github.com/nix-community/NUR/blob/master/repos.json - NIXOS_VERSION: "23.05" - NIXPKGS_ALLOW_UNFREE: "1" - NIXPKGS_ALLOW_INSECURE: "1" - DOCKER_DRIVER: overlay2 - GIT_DEPTH: 10 - - stages: - - test - - deploy - - before_script: - - nix shell nixpkgs#coreutils-full -c mkdir -p /certs/client/ - - nix shell nixpkgs#coreutils-full -c ln -fs /etc/ssl/certs/ca-bundle.crt /certs/client/ca.pem - - echo > .env-gitlab-ci - - variables=("HOME=$HOME" "CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME" "CI_REPOSITORY_URL=$CI_REPOSITORY_URL" "GITLAB_TOKEN=$GITLAB_TOKEN" "CI_JOB_TOKEN=$CI_JOB_TOKEN" "GITLAB_USER_EMAIL=$GITLAB_USER_EMAIL" "GITLAB_USER_NAME=\"$GITLAB_USER_NAME\"" "CI_REGISTRY_USER=$CI_REGISTRY_USER" "CI_PROJECT_ID=$CI_PROJECT_ID" "CI_PROJECT_DIR=$CI_PROJECT_DIR" "CI_API_V4_URL=$CI_API_V4_URL" "CI_PROJECT_NAME=$CI_PROJECT_NAME" "CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA"); for var in "''${variables[@]}"; do echo "$var" >> .env-gitlab-ci; done - - cat .env-gitlab-ci - - after_script: - - if [ -f .env-gitlab-ci ]; then rm .env-gitlab-ci; fi - - test: - stage: test - tags: - - nixos - script: - - devenv shell test-lib - - cache: - - key: nixos - paths: - - /nix/store - - artifacts: - paths: - - dist - - deploy: - stage: deploy - tags: - - nixos - script: - - devenv shell -c deploy-lib - - when: on_success - - cache: - - key: nixos - paths: - - /nix/store - - - artifacts: - paths: - - dist - EOF - +cat <<'EOF' > CONTRIBUTING.md +# Contributing to schukai GmbH Projects + +## Code of Conduct + +Be a human, not an asshole. Common sense and basic human decency apply. + +## Getting Started + +### Setting up the Project + +1. Fork the project on GitLab. +2. Clone your fork locally. Replace `[your-username]` with your GitLab username and `[project-name]` with the actual project name: + ```bash + git clone $(git config --get remote.origin.url) + ``` +3. Add the upstream repository. Replace `[original-username]` and `[project-name]` with the original repository's username and project name: + ```bash + git remote add upstream https://gitlab.schukai.com/[original-username]/[project-name].git + ``` + +### Making Changes + +1. Create a new branch: + ```bash + git checkout -b new-feature-branch + ``` +2. Make your changes. +3. Commit your changes: + ```bash + git commit -m "Description of change" + ``` + +### Submitting a Merge Request + +1. Push your changes to your fork: + ```bash + git push origin new-feature-branch + ``` +2. Navigate to the original project repository on `gitlab.schukai.com`. +3. Open a Merge Request and provide a clear description of the changes. + +## Coding Guidelines + +- Follow the coding style used in the project. +- Write unit tests for new features. +- Ensure that all tests pass before submitting a Merge Request. + +## Reporting Issues + +If you find an issue, please create a new issue on `gitlab.schukai.com`. + +## Additional Resources + +- [GitLab Flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html) +- [GitLab Merge Request Guidelines](https://docs.gitlab.com/ee/user/project/merge_requests/) + +Thank you for your contribution! + +EOF + +cat <<'EOF' > LICENSE +Copyright (C) 2023 schukai GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published +by the Free Software Foundation, either version 3 of the License. + +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 License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. + +EOF + +cat <<'EOF' > Taskfile.yml + +# THIS FILE IS AUTOGENERATED BY THE DEVENVSHELL +# DO NOT EDIT THIS FILE MANUALLY +# INSTEAD EDIT THE DEVENVSHELL CONFIGURATION FILE devenv.nix +# AND OPEN A SHELL WITH THE COMMAND devenv shell +# +# Information about the task runner can be found here: +# https://taskfile.dev + +version: '3' + +tasks: + default: + cmds: + - task --list + silent: true + + test: + desc: Execute unit tests in Go. + env: + TEST_BY_TASK: true + cmds: + - echo "Execute unit tests in Go." + - gosec . + - go test -tags=runOnTask -cover -v ./... + - go test -tags=runOnTask -bench -v ./... + - go test -tags=runOnTask -race -v ./... + + test-fuzz: + desc: Conduct fuzzing tests.# + env: + TEST_BY_TASK: true + cmds: + - echo "Conduct fuzzing tests." + - go test -tags=runOnTask -v -fuzztime=30s -fuzz=Fuzz ./... + + add-licenses: + desc: Attach license headers to Go files. + cmds: + - echo "Attach license headers to Go files." + - go install github.com/google/addlicense@latest + - addlicense -c "schukai GmbH" -s -l "AGPL-3.0" ./*.go + silent: true + + check-licenses: + desc: Check license headers of Go files. + silent: true + cmds: + - go-licenses save "$(get-go-default-packages)" --ignore "gitlab.schukai.com" --force --save_path ''${DEVENV_ROOT}/licenses/ + + check: + desc: Confirm repository status. + cmds: + - git diff-index --quiet HEAD || (echo "There are uncommitted changes after running make. Please commit or stash them before running make."; exit 1) + silent: true + + commit: + desc: Commit changes to the repository. + aliases: + - c + - ci + - git-commit + cmds: + - do-git-commit +EOF + +cat <<'EOF' > .gitlab-ci.yml + +# THIS FILE IS AUTOGENERATED BY THE DEVENVSHELL +# DO NOT EDIT THIS FILE MANUALLY +# INSTEAD EDIT THE DEVENVSHELL CONFIGURATION FILE devenv.nix +# AND OPEN A SHELL WITH THE COMMAND devenv shell +# + +image: docker-registry.schukai.com:443/nixos-ci-devenv:latest + +variables: + # The repo name as used in + # https://github.com/nix-community/NUR/blob/master/repos.json + NIXOS_VERSION: "23.05" + NIXPKGS_ALLOW_UNFREE: "1" + NIXPKGS_ALLOW_INSECURE: "1" + GIT_DEPTH: 10 + +stages: + - test + - deploy + +before_script: + - echo > .env-gitlab-ci + - variables=("HOME=$HOME" "CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME" "CI_REPOSITORY_URL=$CI_REPOSITORY_URL" "GITLAB_TOKEN=$GITLAB_TOKEN" "CI_JOB_TOKEN=$CI_JOB_TOKEN" "GITLAB_USER_EMAIL=$GITLAB_USER_EMAIL" "GITLAB_USER_NAME=\"$GITLAB_USER_NAME\"" "CI_REGISTRY_USER=$CI_REGISTRY_USER" "CI_PROJECT_ID=$CI_PROJECT_ID" "CI_PROJECT_DIR=$CI_PROJECT_DIR" "CI_API_V4_URL=$CI_API_V4_URL" "CI_PROJECT_NAME=$CI_PROJECT_NAME" "CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA"); for var in "''${variables[@]}"; do echo "$var" >> .env-gitlab-ci; done + - cat .env-gitlab-ci + +after_script: + - if [ -f .env-gitlab-ci ]; then rm .env-gitlab-ci; fi + +test: + stage: test + tags: + - nixos + script: + - devenv shell test-lib + + cache: + - key: nixos + paths: + - /nix/store + + artifacts: + paths: + - dist + +deploy: + stage: deploy + tags: + - nixos + script: + - devenv shell -c deploy-lib + + when: on_success + + cache: + - key: nixos + paths: + - /nix/store + +EOF ''; @@ -635,4 +711,5 @@ printLogfileAndExit 0 ''; + } diff --git a/go.mod b/go.mod index 45a1b39cf62bd1bb51f6b0381d41a0ea1b03dcd1..90c9011c6943a30db30bdeffd152afe119732f96 100644 --- a/go.mod +++ b/go.mod @@ -12,15 +12,15 @@ require ( gitlab.schukai.com/oss/libraries/go/network/http-negotiation v1.3.1 gitlab.schukai.com/oss/libraries/go/utilities/pathfinder v0.9.1 gitlab.schukai.com/oss/libraries/go/utilities/watch v0.3.0 - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 + golang.org/x/exp v0.0.0-20231006140011-7918f672742d gopkg.in/yaml.v3 v3.0.1 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/sys v0.13.0 // indirect ) diff --git a/go.sum b/go.sum index 6e0c1cc40e1d4f3023bac955499bd217ddb1fbeb..143de74938f8450e1de79494bd98774b82e001c1 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= @@ -26,6 +28,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= gitlab.schukai.com/oss/libraries/go/network/http-negotiation v1.3.1 h1:B6BZV3bURUew5u+L/QLaBjdqTlW7P3dHTO19QLkPSfI= @@ -36,9 +40,13 @@ gitlab.schukai.com/oss/libraries/go/utilities/watch v0.3.0 h1:AgsYBBmGFdhkHHx6s4 gitlab.schukai.com/oss/libraries/go/utilities/watch v0.3.0/go.mod h1:tMFl68peRKHgFQLltrTN3JLredofMqvGi3C0SEAj73Y= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 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=