├── .gitignore ├── Dockerfiles ├── Dockerfile.alpine └── Dockerfile.latest ├── tests └── test.yml ├── .github ├── dependabot.yml ├── labels.yml ├── workflows │ ├── release-drafter.yml │ ├── repository.yml │ ├── lint.yml │ ├── action_pull_request.yml │ ├── action_schedule.yml │ ├── action_branch.yml │ └── params.yml └── release-drafter.yml ├── .yamllint ├── LICENSE ├── Makefile └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | Makefile.docker 2 | Makefile.lint 3 | -------------------------------------------------------------------------------- /Dockerfiles/Dockerfile.alpine: -------------------------------------------------------------------------------- 1 | Dockerfile.latest -------------------------------------------------------------------------------- /tests/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | test: 3 | indent1: 4 | indent2: "test" 5 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: 2 3 | updates: 4 | # Maintain dependencies for GitHub Actions 5 | - package-ecosystem: "github-actions" 6 | directory: "/" 7 | schedule: 8 | interval: "daily" 9 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | --- 2 | extends: default 3 | 4 | ignore: | 5 | .yamllint 6 | 7 | 8 | rules: 9 | truthy: 10 | allowed-values: ['true', 'false'] 11 | check-keys: False 12 | level: error 13 | line-length: disable 14 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | # The labels in this file are automatically synced with the repository 2 | # using the micnncim/action-label-syncer action. 3 | --- 4 | - name: C-dependency 5 | color: 1abc9c 6 | description: "Category: Dependency" 7 | - name: PR-block 8 | color: 3498db 9 | description: "Pull Request: Do not merge" 10 | - name: PR-merge 11 | color: 3498db 12 | description: "Pull Request: Merge when ready" 13 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Release Drafter 3 | 4 | on: 5 | push: 6 | # branches to consider in the event; optional, defaults to all 7 | branches: 8 | - master 9 | 10 | jobs: 11 | update_release_draft: 12 | runs-on: ubuntu-latest 13 | steps: 14 | # Drafts your next Release notes as Pull Requests are merged into "master" 15 | - uses: release-drafter/release-drafter@v5 16 | with: 17 | publish: true 18 | env: 19 | GITHUB_TOKEN: ${{ secrets.RELEASE_DRAFTER_TOKEN }} 20 | -------------------------------------------------------------------------------- /.github/workflows/repository.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Repository 3 | 4 | on: 5 | push: 6 | branches: 7 | - master 8 | paths: 9 | - .github/labels.yml 10 | 11 | jobs: 12 | labels: 13 | name: Labels 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v3 19 | 20 | - name: Sync labels 21 | uses: micnncim/action-label-syncer@v1 22 | env: 23 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 24 | with: 25 | manifest: .github/labels.yml 26 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name-template: '$RESOLVED_VERSION 🌈' 3 | tag-template: '$RESOLVED_VERSION' 4 | version-template: '$MAJOR.$MINOR' 5 | categories: 6 | - title: '🚀 Features' 7 | labels: 8 | - 'feature' 9 | - 'enhancement' 10 | - title: '🐛 Bug Fixes' 11 | labels: 12 | - 'fix' 13 | - 'bugfix' 14 | - 'bug' 15 | - title: '🧰 Maintenance' 16 | label: 'chore' 17 | change-template: '- $TITLE @$AUTHOR (#$NUMBER)' 18 | change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. 19 | version-resolver: 20 | major: 21 | labels: 22 | - 'major' 23 | minor: 24 | labels: 25 | - 'minor' 26 | patch: 27 | labels: 28 | - 'patch' 29 | default: minor 30 | template: | 31 | ## Changes 32 | 33 | $CHANGES 34 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Job Name 5 | # ------------------------------------------------------------------------------------------------- 6 | name: lint 7 | 8 | 9 | # ------------------------------------------------------------------------------------------------- 10 | # When to run 11 | # ------------------------------------------------------------------------------------------------- 12 | on: 13 | # Runs on Pull Requests 14 | pull_request: 15 | 16 | 17 | # ------------------------------------------------------------------------------------------------- 18 | # What to run 19 | # ------------------------------------------------------------------------------------------------- 20 | jobs: 21 | lint: 22 | uses: devilbox/github-actions/.github/workflows/lint-generic.yml@master 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 cytopia 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/action_pull_request.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Job Name 5 | # ------------------------------------------------------------------------------------------------- 6 | name: build 7 | 8 | 9 | # ------------------------------------------------------------------------------------------------- 10 | # When to run 11 | # ------------------------------------------------------------------------------------------------- 12 | on: 13 | pull_request: 14 | 15 | 16 | jobs: 17 | 18 | # (1/2) Determine repository params 19 | params: 20 | uses: ./.github/workflows/params.yml 21 | # Only run for forks (contributor) 22 | if: github.event.pull_request.head.repo.fork 23 | 24 | # (2/2) Build 25 | docker: 26 | needs: [params] 27 | uses: devilbox/github-actions/.github/workflows/docker-name-version-flavour-arch.yml@master 28 | with: 29 | enabled: true 30 | can_deploy: false 31 | matrix: ${{ needs.params.outputs.matrix }} 32 | refs: ${{ needs.params.outputs.refs }} 33 | secrets: 34 | dockerhub_username: "" 35 | dockerhub_password: "" 36 | -------------------------------------------------------------------------------- /.github/workflows/action_schedule.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Job Name 5 | # ------------------------------------------------------------------------------------------------- 6 | name: nightly 7 | 8 | 9 | # ------------------------------------------------------------------------------------------------- 10 | # When to run 11 | # ------------------------------------------------------------------------------------------------- 12 | on: 13 | # Runs daily 14 | schedule: 15 | - cron: '0 0 * * *' 16 | 17 | 18 | jobs: 19 | 20 | # (1/2) Determine repository params 21 | params: 22 | uses: ./.github/workflows/params.yml 23 | 24 | # (2/2) Build 25 | docker: 26 | needs: [params] 27 | uses: devilbox/github-actions/.github/workflows/docker-name-version-flavour-arch.yml@master 28 | with: 29 | enabled: true 30 | can_deploy: true 31 | matrix: ${{ needs.params.outputs.matrix }} 32 | refs: ${{ needs.params.outputs.refs }} 33 | secrets: 34 | dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} 35 | dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} 36 | -------------------------------------------------------------------------------- /.github/workflows/action_branch.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Job Name 5 | # ------------------------------------------------------------------------------------------------- 6 | name: build 7 | 8 | 9 | # ------------------------------------------------------------------------------------------------- 10 | # When to run 11 | # ------------------------------------------------------------------------------------------------- 12 | on: 13 | push: 14 | paths: 15 | - 'Makefile' 16 | - 'Dockerfiles/**' 17 | - 'tests/**' 18 | - '.github/workflows/action*.yml' 19 | - '.github/workflows/params.yml' 20 | 21 | jobs: 22 | 23 | # (1/2) Determine repository params 24 | params: 25 | uses: ./.github/workflows/params.yml 26 | 27 | # (2/2) Build 28 | docker: 29 | needs: [params] 30 | uses: devilbox/github-actions/.github/workflows/docker-name-version-flavour-arch.yml@master 31 | with: 32 | enabled: true 33 | can_deploy: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/heads/release-') }} 34 | matrix: ${{ needs.params.outputs.matrix }} 35 | refs: ${{ needs.params.outputs.refs }} 36 | secrets: 37 | dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} 38 | dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} 39 | -------------------------------------------------------------------------------- /Dockerfiles/Dockerfile.latest: -------------------------------------------------------------------------------- 1 | FROM alpine:3.16 as builder 2 | 3 | RUN set -eux \ 4 | && apk add --no-cache \ 5 | bc \ 6 | py3-pip \ 7 | python3 8 | 9 | ARG VERSION 10 | RUN set -eux \ 11 | && if [ "${VERSION}" = "latest" ]; then \ 12 | pip3 install --no-cache-dir --no-compile yamllint; \ 13 | else \ 14 | NEXT="$( echo "${VERSION}+1" | bc )"; \ 15 | pip3 install --no-cache-dir --no-compile "yamllint>=${VERSION},<${NEXT}"; \ 16 | fi \ 17 | && find /usr/lib/ -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ 18 | && find /usr/lib/ -name '*.pyc' -print0 | xargs -0 -n1 rm -rf 19 | 20 | 21 | FROM alpine:3.16 as production 22 | ARG VERSION 23 | # https://github.com/opencontainers/image-spec/blob/master/annotations.md 24 | #LABEL "org.opencontainers.image.created"="" 25 | #LABEL "org.opencontainers.image.version"="" 26 | #LABEL "org.opencontainers.image.revision"="" 27 | LABEL "maintainer"="cytopia " 28 | LABEL "org.opencontainers.image.authors"="cytopia " 29 | LABEL "org.opencontainers.image.vendor"="cytopia" 30 | LABEL "org.opencontainers.image.licenses"="MIT" 31 | LABEL "org.opencontainers.image.url"="https://github.com/cytopia/docker-yamllint" 32 | LABEL "org.opencontainers.image.documentation"="https://github.com/cytopia/docker-yamllint" 33 | LABEL "org.opencontainers.image.source"="https://github.com/cytopia/docker-yamllint" 34 | LABEL "org.opencontainers.image.ref.name"="Yamllint ${VERSION}" 35 | LABEL "org.opencontainers.image.title"="Yamllint ${VERSION}" 36 | LABEL "org.opencontainers.image.description"="Yamllint ${VERSION}" 37 | 38 | RUN set -eux \ 39 | && apk add --no-cache python3 \ 40 | && ln -sf /usr/bin/python3 /usr/bin/python \ 41 | && find /usr/lib/ -name '__pycache__' -print0 | xargs -0 -n1 rm -rf \ 42 | && find /usr/lib/ -name '*.pyc' -print0 | xargs -0 -n1 rm -rf 43 | 44 | COPY --from=builder /usr/lib/python3.10/site-packages/ /usr/lib/python3.10/site-packages/ 45 | COPY --from=builder /usr/bin/yamllint /usr/bin/yamllint 46 | 47 | WORKDIR /data 48 | ENTRYPOINT ["yamllint"] 49 | CMD ["--help"] 50 | -------------------------------------------------------------------------------- /.github/workflows/params.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | # ------------------------------------------------------------------------------------------------- 4 | # Job Name 5 | # ------------------------------------------------------------------------------------------------- 6 | name: params 7 | 8 | 9 | # ------------------------------------------------------------------------------------------------- 10 | # Custom Variables 11 | # ------------------------------------------------------------------------------------------------- 12 | env: 13 | MATRIX: >- 14 | [ 15 | { 16 | "NAME": "yl", 17 | "VERSION": ["latest", "1"], 18 | "FLAVOUR": ["alpine", "latest"], 19 | "ARCH": ["linux/amd64", "linux/386", "linux/arm64", "linux/arm/v7", "linux/arm/v6", "linux/ppc64le", "linux/s390x"] 20 | } 21 | ] 22 | 23 | 24 | # ------------------------------------------------------------------------------------------------- 25 | # When to run 26 | # ------------------------------------------------------------------------------------------------- 27 | on: 28 | workflow_call: 29 | outputs: 30 | matrix: 31 | description: "The determined version matrix" 32 | value: ${{ jobs.params.outputs.matrix }} 33 | refs: 34 | description: "The determined git ref matrix (only during scheduled run)" 35 | value: ${{ jobs.params.outputs.refs }} 36 | 37 | jobs: 38 | params: 39 | runs-on: ubuntu-latest 40 | 41 | outputs: 42 | matrix: ${{ steps.set-matrix.outputs.matrix }} 43 | refs: ${{ steps.set-refs.outputs.matrix }} 44 | 45 | steps: 46 | - name: "[Set-Output] Matrix" 47 | id: set-matrix 48 | run: | 49 | echo "matrix=$( echo '${{ env.MATRIX }}' | jq -M -c )" >> $GITHUB_OUTPUT 50 | 51 | - name: "[Set-Output] Matrix 'Refs' (master branch and latest tag)" 52 | id: set-refs 53 | uses: cytopia/git-ref-matrix-action@v0.1.13 54 | with: 55 | repository_default_branch: master 56 | branches: master 57 | num_latest_tags: 0 58 | if: github.event_name == 'schedule' 59 | 60 | - name: "[DEBUG] Show settings'" 61 | run: | 62 | echo 'Matrix' 63 | echo '--------------------' 64 | echo '${{ steps.set-matrix.outputs.matrix }}' 65 | echo 66 | 67 | echo 'Matrix: Refs' 68 | echo '--------------------' 69 | echo '${{ steps.set-matrix-refs.outputs.matrix }}' 70 | echo 71 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ifneq (,) 2 | .error This Makefile requires GNU Make. 3 | endif 4 | 5 | # Ensure additional Makefiles are present 6 | MAKEFILES = Makefile.docker Makefile.lint 7 | $(MAKEFILES): URL=https://raw.githubusercontent.com/devilbox/makefiles/master/$(@) 8 | $(MAKEFILES): 9 | @if ! (curl --fail -sS -o $(@) $(URL) || wget -O $(@) $(URL)); then \ 10 | echo "Error, curl or wget required."; \ 11 | echo "Exiting."; \ 12 | false; \ 13 | fi 14 | include $(MAKEFILES) 15 | 16 | # Set default Target 17 | .DEFAULT_GOAL := help 18 | 19 | 20 | # ------------------------------------------------------------------------------------------------- 21 | # Default configuration 22 | # ------------------------------------------------------------------------------------------------- 23 | # Own vars 24 | TAG = latest 25 | 26 | # Makefile.docker overwrites 27 | NAME = yamllint 28 | VERSION = latest 29 | IMAGE = cytopia/yamllint 30 | FLAVOUR = latest 31 | FILE = Dockerfile.${FLAVOUR} 32 | DIR = Dockerfiles 33 | 34 | # Building from master branch: Tag == 'latest' 35 | ifeq ($(strip $(TAG)),latest) 36 | ifeq ($(strip $(VERSION)),latest) 37 | DOCKER_TAG = $(FLAVOUR) 38 | else 39 | ifeq ($(strip $(FLAVOUR)),latest) 40 | DOCKER_TAG = $(VERSION) 41 | else 42 | DOCKER_TAG = $(FLAVOUR)-$(VERSION) 43 | endif 44 | endif 45 | # Building from any other branch or tag: Tag == '' 46 | else 47 | ifeq ($(strip $(FLAVOUR)),latest) 48 | DOCKER_TAG = $(VERSION)-$(TAG) 49 | else 50 | DOCKER_TAG = $(FLAVOUR)-$(VERSION)-$(TAG) 51 | endif 52 | endif 53 | 54 | # Makefile.lint overwrites 55 | FL_IGNORES = .git/,.github/,tests/,Dockerfiles/data/ 56 | SC_IGNORES = .git/,.github/,tests/ 57 | JL_IGNORES = .git/,.github/ 58 | 59 | 60 | # ------------------------------------------------------------------------------------------------- 61 | # Default Target 62 | # ------------------------------------------------------------------------------------------------- 63 | .PHONY: help 64 | help: 65 | @echo "lint Lint project files and repository" 66 | @echo 67 | @echo "build [ARCH=...] [TAG=...] Build Docker image" 68 | @echo "rebuild [ARCH=...] [TAG=...] Build Docker image without cache" 69 | @echo "push [ARCH=...] [TAG=...] Push Docker image to Docker hub" 70 | @echo 71 | @echo "manifest-create [ARCHES=...] [TAG=...] Create multi-arch manifest" 72 | @echo "manifest-push [TAG=...] Push multi-arch manifest" 73 | @echo 74 | @echo "test [ARCH=...] Test built Docker image" 75 | @echo 76 | 77 | 78 | # ------------------------------------------------------------------------------------------------- 79 | # Docker Targets 80 | # ------------------------------------------------------------------------------------------------- 81 | .PHONY: build 82 | build: ARGS=--build-arg VERSION=$(VERSION) 83 | build: docker-arch-build 84 | 85 | .PHONY: rebuild 86 | rebuild: ARGS=--build-arg VERSION=$(VERSION) 87 | rebuild: docker-arch-rebuild 88 | 89 | .PHONY: push 90 | push: docker-arch-push 91 | 92 | 93 | # ------------------------------------------------------------------------------------------------- 94 | # Manifest Targets 95 | # ------------------------------------------------------------------------------------------------- 96 | .PHONY: manifest-create 97 | manifest-create: docker-manifest-create 98 | 99 | .PHONY: manifest-push 100 | manifest-push: docker-manifest-push 101 | 102 | 103 | # ------------------------------------------------------------------------------------------------- 104 | # Test Targets 105 | # ------------------------------------------------------------------------------------------------- 106 | .PHONY: test 107 | test: _test-version 108 | test: _test-run 109 | 110 | .PHONY: _test-version 111 | _test-version: 112 | @echo "------------------------------------------------------------" 113 | @echo "- Testing correct version" 114 | @echo "------------------------------------------------------------" 115 | @if [ "$(VERSION)" = "latest" ]; then \ 116 | echo "Fetching latest version from GitHub"; \ 117 | LATEST="$$( \ 118 | curl -L -sS https://github.com/adrienverge/yamllint/releases/latest/ \ 119 | | tac | tac \ 120 | | grep -Eo "adrienverge/yamllint/releases/tag/v[.0-9]+" \ 121 | | head -1 \ 122 | | sed 's/.*v//g' \ 123 | )"; \ 124 | echo "Testing for latest: $${LATEST}"; \ 125 | if ! docker run --platform $(ARCH) --rm $(IMAGE):$(DOCKER_TAG) --version | grep -E "v?$${LATEST}"; then \ 126 | docker run --platform $(ARCH) --rm $(IMAGE):$(DOCKER_TAG) --version; \ 127 | echo "Failed"; \ 128 | exit 1; \ 129 | fi; \ 130 | else \ 131 | echo "Testing for tag: $(VERSION)"; \ 132 | if ! docker run --platform $(ARCH) --rm $(IMAGE):$(DOCKER_TAG) --version | grep -E "v?$(VERSION)[.0-9]+$$"; then \ 133 | docker run --platform $(ARCH) --rm $(IMAGE):$(DOCKER_TAG) --version; \ 134 | echo "Failed"; \ 135 | exit 1; \ 136 | fi; \ 137 | fi; \ 138 | echo "Success"; \ 139 | 140 | .PHONY: _test-run 141 | _test-run: 142 | @echo "------------------------------------------------------------" 143 | @echo "- Testing yaml files " 144 | @echo "------------------------------------------------------------" 145 | if ! docker run --rm --platform $(ARCH) -v $(CURRENT_DIR)/tests:/data $(IMAGE):$(DOCKER_TAG) . ; then \ 146 | echo "Failed"; \ 147 | exit 1; \ 148 | fi; \ 149 | echo "Success"; 150 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker image for `yamllint` 2 | 3 | [![Tag](https://img.shields.io/github/tag/cytopia/docker-yamllint.svg)](https://github.com/cytopia/docker-yamllint/releases) 4 | [![](https://img.shields.io/badge/github-cytopia%2Fdocker--yamllint-red.svg)](https://github.com/cytopia/docker-yamllint "github.com/cytopia/docker-yamllint") 5 | [![License](https://img.shields.io/badge/license-MIT-%233DA639.svg)](https://opensource.org/licenses/MIT) 6 | 7 | [![lint](https://github.com/cytopia/docker-yamllint/workflows/lint/badge.svg)](https://github.com/cytopia/docker-yamllint/actions?query=workflow%3Alint) 8 | [![build](https://github.com/cytopia/docker-yamllint/workflows/build/badge.svg)](https://github.com/cytopia/docker-yamllint/actions?query=workflow%3Abuild) 9 | [![nightly](https://github.com/cytopia/docker-yamllint/workflows/nightly/badge.svg)](https://github.com/cytopia/docker-yamllint/actions?query=workflow%3Anightly) 10 | 11 | 12 | > #### All [#awesome-ci](https://github.com/topics/awesome-ci) Docker images 13 | > 14 | > [ansible-lint][alint-git-lnk] **•** 15 | > [ansible][ansible-git-lnk] **•** 16 | > [awesome-ci][aci-git-lnk] **•** 17 | > [bandit][bandit-git-lnk] **•** 18 | > [black][black-git-lnk] **•** 19 | > [checkmake][cm-git-lnk] **•** 20 | > [eslint][elint-git-lnk] **•** 21 | > [file-lint][flint-git-lnk] **•** 22 | > [gofmt][gfmt-git-lnk] **•** 23 | > [goimports][gimp-git-lnk] **•** 24 | > [golint][glint-git-lnk] **•** 25 | > [jsonlint][jlint-git-lnk] **•** 26 | > [kubeval][kubeval-git-lnk] **•** 27 | > [linkcheck][linkcheck-git-lnk] **•** 28 | > [mypy][mypy-git-lnk] **•** 29 | > [php-cs-fixer][pcsf-git-lnk] **•** 30 | > [phpcbf][pcbf-git-lnk] **•** 31 | > [phpcs][pcs-git-lnk] **•** 32 | > [phplint][plint-git-lnk] **•** 33 | > [pycodestyle][pycs-git-lnk] **•** 34 | > [pydocstyle][pyds-git-lnk] **•** 35 | > [pylint][pylint-git-lnk] **•** 36 | > [terraform-docs][tfdocs-git-lnk] **•** 37 | > [terragrunt-fmt][tgfmt-git-lnk] **•** 38 | > [terragrunt][tg-git-lnk] **•** 39 | > [yamlfmt][yfmt-git-lnk] **•** 40 | > [yamllint][ylint-git-lnk] 41 | 42 | View **[Dockerfiles](https://github.com/cytopia/docker-yamllint/blob/master/Dockerfiles/)** on GitHub. 43 | 44 | 45 | **Available Architectures:** `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` 46 | 47 | Tiny Alpine-based dockerized version of [yamllint](https://github.com/adrienverge/yamllint)[1]. 48 | The image is built nightly against the latest stable version of `yamllint` and pushed to Dockerhub. 49 | 50 | [1] Official project: https://github.com/adrienverge/yamllint 51 | 52 | 53 | ## :whale: Available Docker image versions 54 | 55 | [![](https://img.shields.io/docker/pulls/cytopia/yamllint.svg)](https://hub.docker.com/r/cytopia/yamllint) 56 | [![Docker](https://badgen.net/badge/icon/:latest?icon=docker&label=cytopia/yamllint)](https://hub.docker.com/r/cytopia/yamllint) 57 | 58 | #### Rolling releaess 59 | 60 | The following Docker image tags are rolling releases and are built and updated every night. 61 | 62 | [![nightly](https://github.com/cytopia/docker-yamllint/workflows/nightly/badge.svg)](https://github.com/cytopia/docker-yamllint/actions?query=workflow%3Anightly) 63 | 64 | 65 | | Docker Tag | Git Ref | Yamllint | Flavour | Available Architectures | 66 | |----------------------|-----------|--------------|---------|----------------------------------------------| 67 | | `latest` | master | latest | default | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 68 | | `alpine` | master | latest | Alpine | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 69 | | | | | | | 70 | | `1` | master | **`1.x.x`** | default | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 71 | | `alpine-1` | master | **`1.x.x`** | Alpine | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 72 | 73 | #### Point in time releases 74 | 75 | The following Docker image tags are built once and can be used for reproducible builds. Its version never changes so you will have to update tags in your pipelines from time to time in order to stay up-to-date. 76 | 77 | [![build](https://github.com/cytopia/docker-yamllint/workflows/build/badge.svg)](https://github.com/cytopia/docker-yamllint/actions?query=workflow%3Abuild) 78 | 79 | 80 | | Docker Tag | Git Ref | Yamllint | Flavour | Available Architectures | 81 | |----------------------|--------------|--------------|---------|----------------------------------------------| 82 | | `latest-0.10` | tag: `` | latest | default | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 83 | | `alpine-latest-0.10` | tag: `` | latest | Alpine | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 84 | | | | | | | 85 | | `1-0.10` | tag: `` | **`1.x.x`** | default | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 86 | | `alpine-1-0.10` | tag: `` | **`1.x.x`** | Alpine | `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x` | 87 | 88 | > Where `` refers to the chosen git tag from this repository. 89 | 90 | 91 | ## :open_file_folder: Docker mounts 92 | 93 | The working directory inside the Docker container is **`/data/`** and should be mounted locally to 94 | the root of your project where your `.yamllint` file is located. 95 | 96 | 97 | ## :computer: Usage 98 | 99 | ### Command line 100 | ```bash 101 | docker run --rm -it -v $(pwd):/data cytopia/yamllint . 102 | ``` 103 | 104 | ### Makefile 105 | ```make 106 | ifneq (,) 107 | .error This Makefile requires GNU Make. 108 | endif 109 | 110 | lint: lint-yaml 111 | 112 | lint-yaml: 113 | @docker run --rm $$(tty -s && echo "-it" || echo) -v $(PWD):/data cytopia/yamllint:latest . 114 | ``` 115 | 116 | ### GitLab CI 117 | ```yaml 118 | stages: 119 | - lint 120 | 121 | lint-yaml: 122 | stage: lint 123 | image: 124 | name: cytopia/yamllint 125 | entrypoint: ["/bin/ash", "-c"] 126 | script: 127 | - yamllint -f colored . 128 | ``` 129 | 130 | 131 | ## :arrows_counterclockwise: Related [#awesome-ci](https://github.com/topics/awesome-ci) projects 132 | 133 | ### Docker images 134 | 135 | Save yourself from installing lot's of dependencies and pick a dockerized version of your favourite 136 | linter below for reproducible local or remote CI tests: 137 | 138 | | GitHub | DockerHub | Type | Description | 139 | |--------|-----------|------|-------------| 140 | | [awesome-ci][aci-git-lnk] | [![aci-hub-img]][aci-hub-lnk] | Basic | Tools for git, file and static source code analysis | 141 | | [file-lint][flint-git-lnk] | [![flint-hub-img]][flint-hub-lnk] | Basic | Baisc source code analysis | 142 | | [linkcheck][linkcheck-git-lnk] | [![linkcheck-hub-img]][flint-hub-lnk] | Basic | Search for URLs in files and validate their HTTP status code | 143 | | [ansible][ansible-git-lnk] | [![ansible-hub-img]][ansible-hub-lnk] | Ansible | Multiple versions and flavours of Ansible | 144 | | [ansible-lint][alint-git-lnk] | [![alint-hub-img]][alint-hub-lnk] | Ansible | Lint Ansible | 145 | | [gofmt][gfmt-git-lnk] | [![gfmt-hub-img]][gfmt-hub-lnk] | Go | Format Go source code **[1]** | 146 | | [goimports][gimp-git-lnk] | [![gimp-hub-img]][gimp-hub-lnk] | Go | Format Go source code **[1]** | 147 | | [golint][glint-git-lnk] | [![glint-hub-img]][glint-hub-lnk] | Go | Lint Go code | 148 | | [eslint][elint-git-lnk] | [![elint-hub-img]][elint-hub-lnk] | Javascript | Lint Javascript code | 149 | | [jsonlint][jlint-git-lnk] | [![jlint-hub-img]][jlint-hub-lnk] | JSON | Lint JSON files **[1]** | 150 | | [kubeval][kubeval-git-lnk] | [![kubeval-hub-img]][kubeval-hub-lnk] | K8s | Lint Kubernetes files | 151 | | [checkmake][cm-git-lnk] | [![cm-hub-img]][cm-hub-lnk] | Make | Lint Makefiles | 152 | | [phpcbf][pcbf-git-lnk] | [![pcbf-hub-img]][pcbf-hub-lnk] | PHP | PHP Code Beautifier and Fixer | 153 | | [phpcs][pcs-git-lnk] | [![pcs-hub-img]][pcs-hub-lnk] | PHP | PHP Code Sniffer | 154 | | [phplint][plint-git-lnk] | [![plint-hub-img]][plint-hub-lnk] | PHP | PHP Code Linter **[1]** | 155 | | [php-cs-fixer][pcsf-git-lnk] | [![pcsf-hub-img]][pcsf-hub-lnk] | PHP | PHP Coding Standards Fixer | 156 | | [bandit][bandit-git-lnk] | [![bandit-hub-img]][bandit-hub-lnk] | Python | A security linter from PyCQA 157 | | [black][black-git-lnk] | [![black-hub-img]][black-hub-lnk] | Python | The uncompromising Python code formatter | 158 | | [mypy][mypy-git-lnk] | [![mypy-hub-img]][mypy-hub-lnk] | Python | Static source code analysis | 159 | | [pycodestyle][pycs-git-lnk] | [![pycs-hub-img]][pycs-hub-lnk] | Python | Python style guide checker | 160 | | [pydocstyle][pyds-git-lnk] | [![pyds-hub-img]][pyds-hub-lnk] | Python | Python docstyle checker | 161 | | [pylint][pylint-git-lnk] | [![pylint-hub-img]][pylint-hub-lnk] | Python | Python source code, bug and quality checker | 162 | | [terraform-docs][tfdocs-git-lnk] | [![tfdocs-hub-img]][tfdocs-hub-lnk] | Terraform | Terraform doc generator (TF 0.12 ready) **[1]** | 163 | | [terragrunt][tg-git-lnk] | [![tg-hub-img]][tg-hub-lnk] | Terraform | Terragrunt and Terraform | 164 | | [terragrunt-fmt][tgfmt-git-lnk] | [![tgfmt-hub-img]][tgfmt-hub-lnk] | Terraform | `terraform fmt` for Terragrunt files **[1]** | 165 | | [yamlfmt][yfmt-git-lnk] | [![yfmt-hub-img]][yfmt-hub-lnk] | Yaml | Format Yaml files **[1]** | 166 | | [yamllint][ylint-git-lnk] | [![ylint-hub-img]][ylint-hub-lnk] | Yaml | Lint Yaml files | 167 | 168 | > **[1]** Uses a shell wrapper to add **enhanced functionality** not available by original project. 169 | 170 | [aci-git-lnk]: https://github.com/cytopia/awesome-ci 171 | [aci-hub-img]: https://img.shields.io/docker/pulls/cytopia/awesome-ci.svg 172 | [aci-hub-lnk]: https://hub.docker.com/r/cytopia/awesome-ci 173 | 174 | [flint-git-lnk]: https://github.com/cytopia/docker-file-lint 175 | [flint-hub-img]: https://img.shields.io/docker/pulls/cytopia/file-lint.svg 176 | [flint-hub-lnk]: https://hub.docker.com/r/cytopia/file-lint 177 | 178 | [linkcheck-git-lnk]: https://github.com/cytopia/docker-linkcheck 179 | [linkcheck-hub-img]: https://img.shields.io/docker/pulls/cytopia/linkcheck.svg 180 | [linkcheck-hub-lnk]: https://hub.docker.com/r/cytopia/linkcheck 181 | 182 | [jlint-git-lnk]: https://github.com/cytopia/docker-jsonlint 183 | [jlint-hub-img]: https://img.shields.io/docker/pulls/cytopia/jsonlint.svg 184 | [jlint-hub-lnk]: https://hub.docker.com/r/cytopia/jsonlint 185 | 186 | [ansible-git-lnk]: https://github.com/cytopia/docker-ansible 187 | [ansible-hub-img]: https://img.shields.io/docker/pulls/cytopia/ansible.svg 188 | [ansible-hub-lnk]: https://hub.docker.com/r/cytopia/ansible 189 | 190 | [alint-git-lnk]: https://github.com/cytopia/docker-ansible-lint 191 | [alint-hub-img]: https://img.shields.io/docker/pulls/cytopia/ansible-lint.svg 192 | [alint-hub-lnk]: https://hub.docker.com/r/cytopia/ansible-lint 193 | 194 | [kubeval-git-lnk]: https://github.com/cytopia/docker-kubeval 195 | [kubeval-hub-img]: https://img.shields.io/docker/pulls/cytopia/kubeval.svg 196 | [kubeval-hub-lnk]: https://hub.docker.com/r/cytopia/kubeval 197 | 198 | [gfmt-git-lnk]: https://github.com/cytopia/docker-gofmt 199 | [gfmt-hub-img]: https://img.shields.io/docker/pulls/cytopia/gofmt.svg 200 | [gfmt-hub-lnk]: https://hub.docker.com/r/cytopia/gofmt 201 | 202 | [gimp-git-lnk]: https://github.com/cytopia/docker-goimports 203 | [gimp-hub-img]: https://img.shields.io/docker/pulls/cytopia/goimports.svg 204 | [gimp-hub-lnk]: https://hub.docker.com/r/cytopia/goimports 205 | 206 | [glint-git-lnk]: https://github.com/cytopia/docker-golint 207 | [glint-hub-img]: https://img.shields.io/docker/pulls/cytopia/golint.svg 208 | [glint-hub-lnk]: https://hub.docker.com/r/cytopia/golint 209 | 210 | [elint-git-lnk]: https://github.com/cytopia/docker-eslint 211 | [elint-hub-img]: https://img.shields.io/docker/pulls/cytopia/eslint.svg 212 | [elint-hub-lnk]: https://hub.docker.com/r/cytopia/eslint 213 | 214 | [cm-git-lnk]: https://github.com/cytopia/docker-checkmake 215 | [cm-hub-img]: https://img.shields.io/docker/pulls/cytopia/checkmake.svg 216 | [cm-hub-lnk]: https://hub.docker.com/r/cytopia/checkmake 217 | 218 | [pcbf-git-lnk]: https://github.com/cytopia/docker-phpcbf 219 | [pcbf-hub-img]: https://img.shields.io/docker/pulls/cytopia/phpcbf.svg 220 | [pcbf-hub-lnk]: https://hub.docker.com/r/cytopia/phpcbf 221 | 222 | [pcs-git-lnk]: https://github.com/cytopia/docker-phpcs 223 | [pcs-hub-img]: https://img.shields.io/docker/pulls/cytopia/phpcs.svg 224 | [pcs-hub-lnk]: https://hub.docker.com/r/cytopia/phpcs 225 | 226 | [plint-git-lnk]: https://github.com/cytopia/docker-phplint 227 | [plint-hub-img]: https://img.shields.io/docker/pulls/cytopia/phplint.svg 228 | [plint-hub-lnk]: https://hub.docker.com/r/cytopia/phplint 229 | 230 | [pcsf-git-lnk]: https://github.com/cytopia/docker-php-cs-fixer 231 | [pcsf-hub-img]: https://img.shields.io/docker/pulls/cytopia/php-cs-fixer.svg 232 | [pcsf-hub-lnk]: https://hub.docker.com/r/cytopia/php-cs-fixer 233 | 234 | [bandit-git-lnk]: https://github.com/cytopia/docker-bandit 235 | [bandit-hub-img]: https://img.shields.io/docker/pulls/cytopia/bandit.svg 236 | [bandit-hub-lnk]: https://hub.docker.com/r/cytopia/bandit 237 | 238 | [black-git-lnk]: https://github.com/cytopia/docker-black 239 | [black-hub-img]: https://img.shields.io/docker/pulls/cytopia/black.svg 240 | [black-hub-lnk]: https://hub.docker.com/r/cytopia/black 241 | 242 | [mypy-git-lnk]: https://github.com/cytopia/docker-mypy 243 | [mypy-hub-img]: https://img.shields.io/docker/pulls/cytopia/mypy.svg 244 | [mypy-hub-lnk]: https://hub.docker.com/r/cytopia/mypy 245 | 246 | [pycs-git-lnk]: https://github.com/cytopia/docker-pycodestyle 247 | [pycs-hub-img]: https://img.shields.io/docker/pulls/cytopia/pycodestyle.svg 248 | [pycs-hub-lnk]: https://hub.docker.com/r/cytopia/pycodestyle 249 | 250 | [pyds-git-lnk]: https://github.com/cytopia/docker-pydocstyle 251 | [pyds-hub-img]: https://img.shields.io/docker/pulls/cytopia/pydocstyle.svg 252 | [pyds-hub-lnk]: https://hub.docker.com/r/cytopia/pydocstyle 253 | 254 | [pylint-git-lnk]: https://github.com/cytopia/docker-pylint 255 | [pylint-hub-img]: https://img.shields.io/docker/pulls/cytopia/pylint.svg 256 | [pylint-hub-lnk]: https://hub.docker.com/r/cytopia/pylint 257 | 258 | [tfdocs-git-lnk]: https://github.com/cytopia/docker-terraform-docs 259 | [tfdocs-hub-img]: https://img.shields.io/docker/pulls/cytopia/terraform-docs.svg 260 | [tfdocs-hub-lnk]: https://hub.docker.com/r/cytopia/terraform-docs 261 | 262 | [tg-git-lnk]: https://github.com/cytopia/docker-terragrunt 263 | [tg-hub-img]: https://img.shields.io/docker/pulls/cytopia/terragrunt.svg 264 | [tg-hub-lnk]: https://hub.docker.com/r/cytopia/terragrunt 265 | 266 | [tgfmt-git-lnk]: https://github.com/cytopia/docker-terragrunt-fmt 267 | [tgfmt-hub-img]: https://img.shields.io/docker/pulls/cytopia/terragrunt-fmt.svg 268 | [tgfmt-hub-lnk]: https://hub.docker.com/r/cytopia/terragrunt-fmt 269 | 270 | [yfmt-git-lnk]: https://github.com/cytopia/docker-yamlfmt 271 | [yfmt-hub-img]: https://img.shields.io/docker/pulls/cytopia/yamlfmt.svg 272 | [yfmt-hub-lnk]: https://hub.docker.com/r/cytopia/yamlfmt 273 | 274 | [ylint-git-lnk]: https://github.com/cytopia/docker-yamllint 275 | [ylint-hub-img]: https://img.shields.io/docker/pulls/cytopia/yamllint.svg 276 | [ylint-hub-lnk]: https://hub.docker.com/r/cytopia/yamllint 277 | 278 | 279 | ### Makefiles 280 | 281 | Visit **[cytopia/makefiles](https://github.com/cytopia/makefiles)** for dependency-less, seamless project integration and minimum required best-practice code linting for CI. 282 | The provided Makefiles will only require GNU Make and Docker itself removing the need to install anything else. 283 | 284 | 285 | ## :page_facing_up: License 286 | 287 | 288 | **[MIT License](LICENSE)** 289 | 290 | Copyright (c) 2019 [cytopia](https://github.com/cytopia) 291 | --------------------------------------------------------------------------------