diff --git a/.chglog/CHANGELOG.tpl.md b/.chglog/CHANGELOG.tpl.md
new file mode 100755
index 0000000..3f7457d
--- /dev/null
+++ b/.chglog/CHANGELOG.tpl.md
@@ -0,0 +1,27 @@
+# Changelog
+
+{{ range .Versions -}}
+## {{ if .Tag.Previous }}[{{ .Tag.Name }}]({{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}){{ else }}{{ .Tag.Name }}{{ end }} ({{ datetime "2006-01-02" .Tag.Date }})
+
+{{ range .CommitGroups -}}
+### {{ .Title }}
+
+{{ $subjects := list }}
+{{ range .Commits -}}
+{{ if not (has .Subject $subjects) -}}
+- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
+{{ $subjects = append $subjects .Subject -}}
+{{ end }}
+{{- end }}
+{{- end -}}
+
+{{- if .NoteGroups -}}
+{{ range .NoteGroups -}}
+### {{ .Title }}
+
+{{ range .Notes }}
+{{ .Body }}
+{{ end }}
+{{ end -}}
+{{ end -}}
+{{ end -}}
diff --git a/.chglog/config.yml b/.chglog/config.yml
new file mode 100755
index 0000000..9373b2d
--- /dev/null
+++ b/.chglog/config.yml
@@ -0,0 +1,25 @@
+style: github
+template: CHANGELOG.tpl.md
+info:
+ title: CHANGELOG
+ repository_url: https://github.com/thegeeklab/drone-yaml
+options:
+ commit_groups:
+ title_maps:
+ feat: Features
+ fix: Bug Fixes
+ perf: Performance Improvements
+ refactor: Code Refactoring
+ chore: Others
+ test: Testing
+ ci: CI Pipeline
+ docs: Documentation
+ header:
+ pattern: "^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$"
+ pattern_maps:
+ - Type
+ - Scope
+ - Subject
+ notes:
+ keywords:
+ - BREAKING CHANGE
diff --git a/.dictionary b/.dictionary
new file mode 100644
index 0000000..e69de29
diff --git a/.drone.jsonnet b/.drone.jsonnet
new file mode 100644
index 0000000..e3d5892
--- /dev/null
+++ b/.drone.jsonnet
@@ -0,0 +1,394 @@
+local PipelineTest = {
+ kind: 'pipeline',
+ image_pull_secrets: ['docker_config'],
+ name: 'test',
+ platform: {
+ os: 'linux',
+ arch: 'amd64',
+ },
+ steps: [
+ {
+ name: 'staticcheck',
+ image: 'golang:1.16',
+ commands: [
+ 'go run honnef.co/go/tools/cmd/staticcheck ./...',
+ ],
+ volumes: [
+ {
+ name: 'gopath',
+ path: '/go',
+ },
+ ],
+ },
+ {
+ name: 'lint',
+ image: 'golang:1.16',
+ commands: [
+ 'go run golang.org/x/lint/golint -set_exit_status ./...',
+ ],
+ volumes: [
+ {
+ name: 'gopath',
+ path: '/go',
+ },
+ ],
+ },
+ {
+ name: 'vet',
+ image: 'golang:1.16',
+ commands: [
+ 'go vet ./...',
+ ],
+ volumes: [
+ {
+ name: 'gopath',
+ path: '/go',
+ },
+ ],
+ },
+ {
+ name: 'test',
+ image: 'golang:1.16',
+ commands: [
+ 'go test -cover ./...',
+ ],
+ volumes: [
+ {
+ name: 'gopath',
+ path: '/go',
+ },
+ ],
+ },
+ ],
+ volumes: [
+ {
+ name: 'gopath',
+ temp: {},
+ },
+ ],
+ trigger: {
+ ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'],
+ },
+};
+
+
+local PipelineBuildBinaries = {
+ kind: 'pipeline',
+ image_pull_secrets: ['docker_config'],
+ name: 'build-binaries',
+ platform: {
+ os: 'linux',
+ arch: 'amd64',
+ },
+ steps: [
+ {
+ name: 'build',
+ image: 'techknowlogick/xgo:go-1.16.x',
+ commands: [
+ '[ -z "${DRONE_TAG}" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8} || BUILD_VERSION=${DRONE_TAG##v}',
+ 'mkdir -p release/',
+ "cd cmd/drone-yaml && xgo -ldflags \"-s -w -X main.version=$BUILD_VERSION\" -tags netgo -targets 'linux/amd64,linux/arm-6,linux/arm-7,linux/arm64' -out drone-yaml .",
+ 'mv /build/* /drone/src/release/',
+ 'ls -l /drone/src/release/',
+ ],
+ },
+ {
+ name: 'executable',
+ image: 'alpine',
+ commands: [
+ '$(find release/ -executable -type f | grep drone-yaml-linux-amd64) --help',
+ ],
+ },
+ {
+ name: 'compress',
+ image: 'alpine',
+ commands: [
+ 'apk add upx',
+ 'find release/ -maxdepth 1 -executable -type f -exec upx {} \\;',
+ 'ls -lh release/',
+ ],
+ },
+ {
+ name: 'checksum',
+ image: 'alpine',
+ commands: [
+ 'cd release/ && sha256sum * > sha256sum.txt',
+ ],
+ },
+ {
+ 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: {
+ overwrite: true,
+ api_key: {
+ from_secret: 'github_token',
+ },
+ files: ['release/*'],
+ title: '${DRONE_TAG}',
+ note: 'CHANGELOG.md',
+ },
+ when: {
+ ref: [
+ 'refs/tags/**',
+ ],
+ },
+ },
+ ],
+ depends_on: [
+ 'test',
+ ],
+ trigger: {
+ ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'],
+ },
+};
+
+local PipelineBuildContainer(arch='amd64') = {
+ kind: 'pipeline',
+ image_pull_secrets: ['docker_config'],
+ name: 'build-container-' + arch,
+ platform: {
+ os: 'linux',
+ arch: arch,
+ },
+ steps: [
+ {
+ name: 'build',
+ image: 'golang:1.16',
+ commands: [
+ '[ -z "${DRONE_TAG}" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8} || BUILD_VERSION=${DRONE_TAG##v}',
+ 'go build -v -ldflags "-X main.version=$BUILD_VERSION" -a -tags netgo -o release/' + arch + '/drone-yaml ./cmd/drone-yaml',
+ ],
+ },
+ {
+ name: 'dryrun',
+ image: 'thegeeklab/drone-docker:19',
+ settings: {
+ config: { from_secret: 'docker_config' },
+ dry_run: true,
+ dockerfile: 'docker/Dockerfile.' + arch,
+ repo: 'thegeeklab/${DRONE_REPO_NAME}',
+ username: { from_secret: 'docker_username' },
+ password: { from_secret: 'docker_password' },
+ },
+ depends_on: ['build'],
+ when: {
+ ref: ['refs/pull/**'],
+ },
+ },
+ {
+ name: 'publish-dockerhub',
+ image: 'thegeeklab/drone-docker:19',
+ settings: {
+ config: { from_secret: 'docker_config' },
+ auto_tag: true,
+ auto_tag_suffix: arch,
+ dockerfile: 'docker/Dockerfile.' + arch,
+ repo: 'thegeeklab/${DRONE_REPO_NAME}',
+ username: { from_secret: 'docker_username' },
+ password: { from_secret: 'docker_password' },
+ },
+ when: {
+ ref: ['refs/heads/main', 'refs/tags/**'],
+ },
+ depends_on: ['dryrun'],
+ },
+ {
+ name: 'publish-quay',
+ image: 'thegeeklab/drone-docker:19',
+ settings: {
+ config: { from_secret: 'docker_config' },
+ auto_tag: true,
+ auto_tag_suffix: arch,
+ dockerfile: 'docker/Dockerfile.' + arch,
+ registry: 'quay.io',
+ repo: 'quay.io/thegeeklab/${DRONE_REPO_NAME}',
+ username: { from_secret: 'quay_username' },
+ password: { from_secret: 'quay_password' },
+ },
+ when: {
+ ref: ['refs/heads/main', 'refs/tags/**'],
+ },
+ depends_on: ['dryrun'],
+ },
+ ],
+ depends_on: [
+ 'test',
+ ],
+ trigger: {
+ ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'],
+ },
+};
+
+local PipelineDocs = {
+ 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: 'node:lts-alpine',
+ commands: [
+ 'npm install -g spellchecker-cli',
+ "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: {
+ username: { from_secret: 'github_username' },
+ password: { from_secret: 'github_token' },
+ pages_directory: '_docs/',
+ target_branch: 'docs',
+ },
+ when: {
+ ref: ['refs/heads/main'],
+ },
+ },
+ ],
+ depends_on: [
+ 'build-binaries',
+ 'build-container-amd64',
+ 'build-container-arm64',
+ 'build-container-arm',
+ ],
+ trigger: {
+ ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'],
+ },
+};
+
+local PipelineNotifications = {
+ kind: 'pipeline',
+ image_pull_secrets: ['docker_config'],
+ name: 'notifications',
+ platform: {
+ os: 'linux',
+ arch: 'amd64',
+ },
+ steps: [
+ {
+ image: 'plugins/manifest',
+ name: 'manifest-dockerhub',
+ settings: {
+ ignore_missing: true,
+ auto_tag: true,
+ username: { from_secret: 'docker_username' },
+ password: { from_secret: 'docker_password' },
+ spec: 'docker/manifest.tmpl',
+ },
+ when: {
+ status: ['success'],
+ },
+ },
+ {
+ image: 'plugins/manifest',
+ name: 'manifest-quay',
+ settings: {
+ ignore_missing: true,
+ auto_tag: true,
+ username: { from_secret: 'quay_username' },
+ password: { from_secret: 'quay_password' },
+ spec: 'docker/manifest-quay.tmpl',
+ },
+ when: {
+ status: ['success'],
+ },
+ },
+ {
+ 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: 'Custom Drone YAML formatter',
+ 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: 'plugins/matrix',
+ settings: {
+ homeserver: { from_secret: 'matrix_homeserver' },
+ roomid: { from_secret: 'matrix_roomid' },
+ template: 'Status: **{{ build.status }}**
Build: [{{ repo.Owner }}/{{ repo.Name }}]({{ build.link }}) ({{ build.branch }}) by {{ build.author }}
Message: {{ build.message }}',
+ username: { from_secret: 'matrix_username' },
+ password: { from_secret: 'matrix_password' },
+ },
+ when: {
+ status: ['success', 'failure'],
+ },
+ },
+ ],
+ depends_on: [
+ 'docs',
+ ],
+ trigger: {
+ ref: ['refs/heads/main', 'refs/tags/**'],
+ status: ['success', 'failure'],
+ },
+};
+
+[
+ PipelineTest,
+ PipelineBuildBinaries,
+ PipelineBuildContainer(arch='amd64'),
+ PipelineBuildContainer(arch='arm64'),
+ PipelineBuildContainer(arch='arm'),
+ PipelineDocs,
+ PipelineNotifications,
+]
diff --git a/.github/settings.yml b/.github/settings.yml
new file mode 100644
index 0000000..267300b
--- /dev/null
+++ b/.github/settings.yml
@@ -0,0 +1,65 @@
+repository:
+ name: drone-yaml
+ description: Custom Drone YAML formatter
+ homepage: https://drone-plugin-index.geekdocs.de/tools/drone-yaml
+ topics: drone, drone-plugin
+
+ private: false
+ has_issues: true
+ has_wiki: false
+ has_downloads: true
+
+ default_branch: main
+
+ allow_squash_merge: true
+ allow_merge_commit: true
+ allow_rebase_merge: true
+
+labels:
+ - name: bug
+ color: d73a4a
+ description: Something isn't working
+ - name: documentation
+ color: 0075ca
+ description: Improvements or additions to documentation
+ - name: duplicate
+ color: cfd3d7
+ description: This issue or pull request already exists
+ - name: enhancement
+ color: a2eeef
+ description: New feature or request
+ - name: good first issue
+ color: 7057ff
+ description: Good for newcomers
+ - name: help wanted
+ color: 008672
+ description: Extra attention is needed
+ - name: invalid
+ color: e4e669
+ description: This doesn't seem right
+ - name: question
+ color: d876e3
+ description: Further information is requested
+ - name: wontfix
+ color: ffffff
+ description: This will not be worked on
+
+branches:
+ - name: main
+ protection:
+ required_pull_request_reviews: null
+ required_status_checks:
+ strict: false
+ contexts:
+ - continuous-integration/drone/pr
+ enforce_admins: null
+ restrictions: null
+ - name: docs
+ protection:
+ required_pull_request_reviews: null
+ required_status_checks: null
+ enforce_admins: true
+ restrictions:
+ users: []
+ teams:
+ - bot
diff --git a/.gitignore b/.gitignore
index 80b6570..f8b4fea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-NOTES*
-*.out
-*.env
-drone-yaml
+/release/
+/drone-yaml*
+
+coverage.out
+CHANGELOG.md
diff --git a/.markdownlint.yml b/.markdownlint.yml
new file mode 100644
index 0000000..b59a114
--- /dev/null
+++ b/.markdownlint.yml
@@ -0,0 +1,6 @@
+---
+default: True
+MD013: False
+MD041: False
+MD004:
+ style: dash
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..97e0b3e
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+.drone.yml
+*.tpl.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 121ebb2..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Changelog
-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).
-
-## Unreleased
-### [1.2.3] -2019-01-16
-- format should write zero value of boolean in settings, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Support for windows server 1903, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Support to convert legacy pipelines to kubernetes pipelines, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-## [1.2.2] - 2019-07-29
-### Added
-- Ability to configure network_mode, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Convert legacy branch filter to ref trigger, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Convert legacy deployment event to promotion event, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-## [1.2.1] - 2019-07-17
-### Added
-- Pull if-not-exists when converting legacy yaml files, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Improve workspace support when converting legacy yaml files, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Improve registry secret support when converting legacy yaml files, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-## [1.2.0] - 2019-07-16
-### Added
-- Added Action field to trigger and when clause, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Improve escaping when marshaling to yaml, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Handle duplicate step names when converting legacy configurations, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Handle dot workspace path when converting legacy configurations, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-## [1.1.1] - 2019-05-30
-### Fixed
-- Retain order of steps when converting legacy pipelines with merge keys, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-
-## [1.1.0] - 2019-05-30
-### Fixed
-- Support for yaml merge keys, by [@bradrydzewski](https://github.com/bradrydzewski).
-- Improve how colon characters are escaped, by [@bradrydzewski](https://github.com/bradrydzewski). Issue [#45](https://github.com/drone/drone-yaml/issues/45).
-- Improve how pipe and caret characters are escaped, by [@bradrydzewski](https://github.com/bradrydzewski). Issue [#44](https://github.com/drone/drone-yaml/issues/44).
-- Error when empty document or missing kind attribute, by [@bradrydzewski](https://github.com/bradrydzewski). Issue [#42](https://github.com/drone/drone-yaml/issues/42).
-
-## [1.0.9] - 2019-05-20
-### Added
-- Only lint resources of kind pipeline and of type docker, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-## [1.0.8] - 2019-04-13
-### Added
-- Support Cron job name in When clause, by [@bradrydzewski](https://github.com/bradrydzewski).
-
-## [1.0.7] - 2019-04-10
-### Added
-- Optionally set the Docker container User, by [@bradrydzewski](https://github.com/bradrydzewski).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..c471f59
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,31 @@
+# Contributing
+
+## 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.
+
+## Bug Reports and Feature Requests
+
+If you have found a **bug** or have a **feature request** please use the search first in case a similar issue already exists.
+If not, please create an issue in this repository
+
+## Code
+
+If you would like to fix a bug or implement a feature, please fork the repository and create a Pull Request.
+
+Before you start any Pull Request, it is recommended that you create an issue to discuss first if you have any
+doubts about requirement or implementation. That way you can be sure that the maintainer(s) agree on what to change and how,
+and you can hopefully get a quick merge afterwards.
+
+Pull Requests can only be merged once all status checks are green.
+
+## Do not force push to your Pull Request branch
+
+Please do not force push to your Pull Requests branch after you have created your Pull Request, as doing so makes it harder for us to review your work.
+Pull Requests will always be squashed by us when we merge your work. Commit as many times as you need in your Pull Request branch.
+
+## Re-requesting a review
+
+Please do not ping your reviewer(s) by mentioning them in a new comment. Instead, use the re-request review functionality.
+Read more about this in the [GitHub docs, Re-requesting a review](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request#re-requesting-a-review).
diff --git a/LICENSE b/LICENSE
index b0d7c8c..e07ea97 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,54 +1,202 @@
-Copyright 2019 Drone.IO, Inc.
-The Drone Community Edition is licensed under the Apache License,
-Version 2.0 (the "Apache License"). You may obtain a copy of the
-Apache License at
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
- http://www.apache.org/licenses/LICENSE-2.0
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-The Drone Enterprise Edition is licensed under the Drone
-Non-Commercial License (the "Non-Commercial License"). A copy of
-the Non-Commercial License is provided below.
+ 1. Definitions.
------------------------------------------------------------------
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
-Drone Non-Commercial License
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
-Contributor: Drone.IO, Inc.
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
-Source Code: https://github.com/drone/drone-yaml
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
-This license lets you use and share this software for free,
-with a trial-length time limit on commercial use. Specifically:
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
-If you follow the rules below, you may do everything with this
-software that would otherwise infringe either the contributor's
-copyright in it, any patent claim the contributor can license
-that covers this software as of the contributor's latest
-contribution, or both.
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
-1. You must limit use of this software in any manner primarily
- intended for or directed toward commercial advantage or
- private monetary compensation to a trial period of 32
- consecutive calendar days. This limit does not apply to use in
- developing feedback, modifications, or extensions that you
- contribute back to those giving this license.
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
-2. Ensure everyone who gets a copy of this software from you, in
- source code or any other form, gets the text of this license
- and the contributor and source code lines above.
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
-3. Do not make any legal claim against anyone for infringing any
- patent claim they would infringe by using this software alone,
- accusing this software, with or without changes, alone or as
- part of a larger application.
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
-You are excused for unknowingly breaking rule 1 if you stop
-doing anything requiring this license within 30 days of
-learning you broke the rule.
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
-**This software comes as is, without any warranty at all. As far
-as the law allows, the contributor will not be liable for any
-damages related to this software or this license, for any kind of
-legal claim.**
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2021 Robert Kaussow
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index 790546d..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,11 +0,0 @@
-Drone
-Copyright 2019 Drone.IO, Inc
-
-This product includes software developed at Drone.IO, Inc.
-(http://drone.io/).
-
-This product includes software developed by Docker, Inc.
-(https://www.docker.com/).
-
-This product includes software developed by Canonical Ltd.
-(https://www.canonical.com/).
diff --git a/README.md b/README.md
index fe58ff9..659e94d 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,22 @@
-Package yaml provides a parser, linter, formatter and compiler for the [drone](https://github.com/drone/drone) configuration file format.
+# drone-yaml
-Lint the yaml file:
+Custom Drone YAML formatter
-```text
-$ drone-yaml lint samples/simple.yml
-```
+[![Build Status](https://img.shields.io/drone/build/thegeeklab/drone-yaml?logo=drone&server=https%3A%2F%2Fdrone.thegeeklab.de)](https://drone.thegeeklab.de/thegeeklab/drone-yaml)
+[![Docker Hub](https://img.shields.io/badge/dockerhub-latest-blue.svg?logo=docker&logoColor=white)](https://hub.docker.com/r/thegeeklab/drone-yaml)
+[![Quay.io](https://img.shields.io/badge/quay-latest-blue.svg?logo=docker&logoColor=white)](https://quay.io/repository/thegeeklab/drone-yaml)
+[![Go Report Card](https://goreportcard.com/badge/github.com/thegeeklab/drone-yaml)](https://goreportcard.com/report/github.com/thegeeklab/drone-yaml)
+[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/drone-yaml)](https://github.com/thegeeklab/drone-yaml/graphs/contributors)
+[![Source: GitHub](https://img.shields.io/badge/source-github-blue.svg?logo=github&logoColor=white)](https://github.com/thegeeklab/drone-yaml)
+[![License: MIT](https://img.shields.io/github/license/thegeeklab/drone-yaml)](https://github.com/thegeeklab/drone-yaml/blob/main/LICENSE)
-Format the yaml file:
+Custom linter and formatter for the [Drone](https://github.com/drone/drone) YAML configuration file format. You can find the full documentation at You can find the full documentation at [https://drone-plugin-index.geekdocs.de](https://drone-plugin-index.geekdocs.de/tools/drone-yaml).
-```text
-$ drone-yaml fmt samples/simple.yml
-$ drone-yaml fmt samples/simple.yml --save
-```
+## Contributors
-Sign the yaml file using a 32-bit secret key:
+Special thanks goes to all [contributors](https://github.com/thegeeklab/drone-yaml/graphs/contributors). If you would like to contribute,
+please see the [instructions](https://github.com/thegeeklab/drone-yaml/blob/main/CONTRIBUTING.md).
-```text
-$ drone-yaml sign 642909eb4c3d47e33999235c0598353c samples/simple.yml
-$ drone-yaml sign 642909eb4c3d47e33999235c0598353c samples/simple.yml --save
-```
+## License
-Verify the yaml file signature:
-
-```text
-$ drone-yaml verify 642909eb4c3d47e33999235c0598353c samples/simple.yml
-```
-
-Compile the yaml file:
-
-```text
-$ drone-yaml compile samples/simple.yml samples/simple.json
-```
+This project is licensed under the MIT License - see the [LICENSE](https://github.com/thegeeklab/drone-yaml/blob/main/LICENSE) file for details.
diff --git a/_docs/_index.md b/_docs/_index.md
new file mode 100644
index 0000000..08bceec
--- /dev/null
+++ b/_docs/_index.md
@@ -0,0 +1,60 @@
+---
+title: drone-yaml
+---
+
+[![Build Status](https://img.shields.io/drone/build/thegeeklab/drone-yaml?logo=drone&server=https%3A%2F%2Fdrone.thegeeklab.de)](https://drone.thegeeklab.de/thegeeklab/drone-yaml)
+[![Docker Hub](https://img.shields.io/badge/dockerhub-latest-blue.svg?logo=docker&logoColor=white)](https://hub.docker.com/r/thegeeklab/drone-yaml)
+[![Quay.io](https://img.shields.io/badge/quay-latest-blue.svg?logo=docker&logoColor=white)](https://quay.io/repository/thegeeklab/drone-yaml)
+[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/drone-yaml)](https://github.com/thegeeklab/drone-yaml/graphs/contributors)
+[![Source: GitHub](https://img.shields.io/badge/source-github-blue.svg?logo=github&logoColor=white)](https://github.com/thegeeklab/drone-yaml)
+[![License: MIT](https://img.shields.io/github/license/thegeeklab/drone-yaml)](https://github.com/thegeeklab/drone-yaml/blob/main/LICENSE)
+
+Custom linter and formatter for the [Drone](https://github.com/drone/drone) YAML configuration file format.
+
+
+
+{{< toc >}}
+
+
+
+## Build
+
+Build the binary with the following command:
+
+```Shell
+export GOOS=linux
+export GOARCH=amd64
+export CGO_ENABLED=0
+export GO111MODULE=on
+
+go build -v -a -tags netgo -o release/linux/amd64/drone-yaml
+```
+
+Build the Docker image with the following command:
+
+```Shell
+docker build --file docker/Dockerfile.amd64 --tag thegeeklab/drone-yaml .
+```
+
+## Usage
+
+{{< hint warning >}}
+**Note**\
+Be aware that the tool only supports configuration files for the Drone Docker runner!
+{{< /hint >}}
+
+Lint the yaml file:
+
+```Shell
+drone-yaml lint samples/simple.yml
+```
+
+Format the yaml file:
+
+```Shell
+# default is printing to stdout
+drone-yaml fmt samples/simple.yml
+
+# optionally update the formatted file in place
+drone-yaml fmt samples/simple.yml --save
+```
diff --git a/docker/Dockerfile.amd64 b/docker/Dockerfile.amd64
new file mode 100644
index 0000000..0de9376
--- /dev/null
+++ b/docker/Dockerfile.amd64
@@ -0,0 +1,11 @@
+FROM alpine:3.14@sha256:e1c082e3d3c45cccac829840a25941e679c25d438cc8412c2fa221cf1a824e6a
+
+LABEL maintainer="Robert Kaussow "
+LABEL org.opencontainers.image.authors="Robert Kaussow "
+LABEL org.opencontainers.image.title="drone-yaml"
+LABEL org.opencontainers.image.url="https://github.com/thegeeklab/drone-yaml"
+LABEL org.opencontainers.image.source="https://github.com/thegeeklab/drone-yaml"
+LABEL org.opencontainers.image.documentation="https://github.com/thegeeklab/drone-yaml"
+
+ADD release/amd64/drone-yaml /bin/
+ENTRYPOINT [ "/bin/drone-yaml" ]
diff --git a/docker/Dockerfile.arm b/docker/Dockerfile.arm
new file mode 100644
index 0000000..6301649
--- /dev/null
+++ b/docker/Dockerfile.arm
@@ -0,0 +1,11 @@
+FROM arm32v7/alpine:3.14@sha256:e12ff876f0075740ed3d7bdf788107ae84c1b3dd6dc98b3baea41088aba5236f
+
+LABEL maintainer="Robert Kaussow "
+LABEL org.opencontainers.image.authors="Robert Kaussow "
+LABEL org.opencontainers.image.title="drone-yaml"
+LABEL org.opencontainers.image.url="https://github.com/thegeeklab/drone-yaml"
+LABEL org.opencontainers.image.source="https://github.com/thegeeklab/drone-yaml"
+LABEL org.opencontainers.image.documentation="https://github.com/thegeeklab/drone-yaml"
+
+ADD release/arm/drone-yaml /bin/
+ENTRYPOINT [ "/bin/drone-yaml" ]
diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64
new file mode 100644
index 0000000..01aff85
--- /dev/null
+++ b/docker/Dockerfile.arm64
@@ -0,0 +1,11 @@
+FROM arm64v8/alpine:3.14@sha256:b06a5cf61b2956088722c4f1b9a6f71dfe95f0b1fe285d44195452b8a1627de7
+
+LABEL maintainer="Robert Kaussow "
+LABEL org.opencontainers.image.authors="Robert Kaussow "
+LABEL org.opencontainers.image.title="drone-yaml"
+LABEL org.opencontainers.image.url="https://github.com/thegeeklab/drone-yaml"
+LABEL org.opencontainers.image.source="https://github.com/thegeeklab/drone-yaml"
+LABEL org.opencontainers.image.documentation="https://github.com/thegeeklab/drone-yaml"
+
+ADD release/arm64/drone-yaml /bin/
+ENTRYPOINT [ "/bin/drone-yaml" ]
diff --git a/docker/manifest-quay.tmpl b/docker/manifest-quay.tmpl
new file mode 100644
index 0000000..c7eb335
--- /dev/null
+++ b/docker/manifest-quay.tmpl
@@ -0,0 +1,24 @@
+image: quay.io/thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
+{{#if build.tags}}
+tags:
+{{#each build.tags}}
+ - {{this}}
+{{/each}}
+{{/if}}
+manifests:
+ - image: quay.io/thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}amd64
+ platform:
+ architecture: amd64
+ os: linux
+
+ - image: quay.io/thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}arm64
+ platform:
+ architecture: arm64
+ os: linux
+ variant: v8
+
+ - image: quay.io/thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}arm
+ platform:
+ architecture: arm
+ os: linux
+ variant: v7
diff --git a/docker/manifest.tmpl b/docker/manifest.tmpl
new file mode 100644
index 0000000..c87dd70
--- /dev/null
+++ b/docker/manifest.tmpl
@@ -0,0 +1,24 @@
+image: thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
+{{#if build.tags}}
+tags:
+{{#each build.tags}}
+ - {{this}}
+{{/each}}
+{{/if}}
+manifests:
+ - image: thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}amd64
+ platform:
+ architecture: amd64
+ os: linux
+
+ - image: thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}arm64
+ platform:
+ architecture: arm64
+ os: linux
+ variant: v8
+
+ - image: thegeeklab/drone-yaml:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}arm
+ platform:
+ architecture: arm
+ os: linux
+ variant: v7
diff --git a/renovate.json b/renovate.json
new file mode 100644
index 0000000..45d1c03
--- /dev/null
+++ b/renovate.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": ["github>thegeeklab/renovate-presets:golang"]
+}
diff --git a/tools.go b/tools.go
new file mode 100644
index 0000000..464dc0a
--- /dev/null
+++ b/tools.go
@@ -0,0 +1,8 @@
+// +build tools
+
+package tools
+
+import (
+ _ "golang.org/x/lint/golint"
+ _ "honnef.co/go/tools/cmd/staticcheck"
+)