diff --git a/.cspell.json b/.cspell.json index fa7ed14..56a831a 100644 --- a/.cspell.json +++ b/.cspell.json @@ -9,21 +9,12 @@ ], "language": "en,en-GB", "words": [ - "ASPNET", - "BASEPATH", - "CODEOWNERS", - "MARKDOWNLINT", - "NOLOGO", - "ONBUILD", - "OPTOUT", - "Sfrg", - "TOOLSDIRECTORY", - "WORKDIR", - "XMLDOC", - "Zrmnxj", "actrc", "aliyun", + "aquasecurity", + "ASPNET", "automake", + "BASEPATH", "binutils", "brotli", "buildkit", @@ -31,6 +22,7 @@ "buildx", "catthehacker", "cmdline", + "CODEOWNERS", "commandlinetools", "containerd", "coreutils", @@ -74,6 +66,7 @@ "libxkbfile", "libxss", "libyaml", + "MARKDOWNLINT", "mauwii", "mediainfo", "mediatypes", @@ -82,11 +75,14 @@ "nbgv", "nektos", "netcat", + "NOLOGO", "noninteractive", "noto", "nupkg", "oldci", + "ONBUILD", "opencontainers", + "OPTOUT", "patchelf", "pigz", "pipefail", @@ -95,6 +91,7 @@ "pwsh", "quickview", "rubygems", + "Sfrg", "shellcheck", "singlearch", "sphinxsearch", @@ -102,14 +99,19 @@ "stefanzweifel", "targetproc", "texinfo", - "trivy", - "trivyignore", "toolcache", + "TOOLSDIRECTORY", "toolsets", + "trivy", + "trivyignore", "tzdata", "vercel", + "vuln", + "WORKDIR", + "XMLDOC", "xorriso", "xvfb", + "Zrmnxj", "zstd", "zsync" ], diff --git a/.github/actions/free-space/action.yml b/.github/actions/free-space/action.yml index 123d7d4..0de28dc 100644 --- a/.github/actions/free-space/action.yml +++ b/.github/actions/free-space/action.yml @@ -1,10 +1,11 @@ # yaml-language-server: $schema=https://json.schemastore.org/github-action.json -name: Free some disk space +name: Free disk space author: mauwii -description: | - This Action can be used to free up some disk-space on - github hosted runners +description: This Action can be used to free up some disk-space on github hosted runners +branding: + icon: 'trash-2' + color: 'blue' inputs: deleteDotnet: @@ -26,8 +27,8 @@ runs: shell: bash run: | for dir in /usr/share/dotnet /opt/hostedtoolcache/dotnet; do - if [ -d $dir ]; then - sudo rm -Rf $dir # Ubuntu 18/20 + if [ -d "${dir}" ]; then + sudo rm -Rf "${dir}" fi done diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 615da1b..2e6f6ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,7 @@ name: ci on: push: + branches: [main] paths: - '**/Dockerfile' - '**/toolsets/*.json' @@ -21,6 +22,9 @@ jobs: runs-on: ubuntu-latest strategy: matrix: + platforms: ['linux/amd64,linux/arm64'] + # platforms: ${{ github.ref == 'refs/heads/main' && fromJson('["linux/amd64,linux/arm64"]') || fromJson(format('["{0}", "{1}"]', 'linux/amd64','linux/arm64')) }} + from-version: ['22.04', '20.04'] include: - from-version: '22.04' from-version-major: '22' @@ -34,13 +38,21 @@ jobs: distro: 'ubuntu' codename: 'focal' from-flavor: 'act' + services: + registry: + image: registry:2 + ports: + - 5000:5000 env: - REGISTRY: docker.io + BUILDKIT_PROGRESS: plain IMAGE_NAME: ${{ format('{0}-{1}', matrix.distro, matrix.from-flavor) }} - IMAGE_REPOSITORY: ${{ format('{0}/{1}', github.repository_owner, format('{0}-{1}', matrix.distro, matrix.from-flavor)) }} + IMAGE_REPOSITORY: ${{ format('{0}/{1}-{2}', vars.DOCKERHUB_USER || github.repository_owner, matrix.distro, matrix.from-flavor) }} SHA: ${{ github.event.pull_request.head.sha || github.event.after }} - DOCKERHUB_USERNAME: ${{ github.repository_owner }} - DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + FROM_TAG: ${{ format('{0}-{1}:{2}-{3}', matrix.distro, matrix.from-flavor, matrix.from-version, github.head_ref || github.ref_name) }} + # FROM_TAG: ${{ format('{0}/{1}/{2}-{3}:{4}-{5}', github.ref == 'refs/heads/main' && 'docker.io' || 'localhost:5000', vars.DOCKERHUB_USER, matrix.distro, matrix.from-flavor, matrix.from-version, github.head_ref || github.ref_name) }} + TO_TAG: ${{ format('{0}/{1}/{2}-{3}:{4}', 'docker.io', vars.DOCKERHUB_USER, matrix.distro, matrix.from-flavor, matrix.from-version) }} + REGISTRY: ${{ vars.DOCKERHUB_USER && 'docker.io' || 'ghcr.io' }} + PATH_TO_IMAGE: /tmp/${{ matrix.distro }}-${{ matrix.from-version }}.tar steps: - uses: actions/checkout@v4 @@ -55,104 +67,152 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2.10.0 - # with: - # driver-opts: | - # image=moby/buildkit:v0.12.2 - # network=host + with: + driver: docker-container + driver-opts: image=moby/buildkit:v0.12.2,network=host + install: true + use: true + cleanup: true + platforms: ${{ matrix.platforms }} - # - name: Login to GitHub Container Registry - # uses: docker/login-action@v2.1.0 - # with: - # registry: ghcr.io - # username: ${{ github.repository_owner }} - # password: ${{ secrets.GITHUB_TOKEN }} + # Login to github container registry + # https://github.com/docker/login-action + - name: Login to GitHub Container Registry + uses: docker/login-action@v2.1.0 + if: vars.DOCKERHUB_USER == '' + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} # Login against a Docker registry # https://github.com/docker/login-action - name: Login to Docker Hub uses: docker/login-action@v2.2.0 + if: vars.DOCKERHUB_USER != '' with: - registry: ${{ env.REGISTRY }} - username: ${{ env.DOCKERHUB_USERNAME }} - password: ${{ env.DOCKERHUB_TOKEN }} + registry: docker.io + username: ${{ vars.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} logout: true # Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta - uses: docker/metadata-action@v4.4.0 + uses: docker/metadata-action@v4.6.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} - images: ${{ format('{0}/{1}', env.REGISTRY, env.IMAGE_REPOSITORY) }} + images: ${{ github.actor == 'nektos/act' && env.IMAGE_REPOSITORY || env.REGISTRY_IMAGE }} tags: | - type=raw,value=${{ matrix.from-version }},enable={{is_default_branch}},priority=900 + type=sha,prefix=${{ matrix.from-version }}-,format=short,enable=${{ github.ref == 'refs/heads/main' }},priority=1000 + type=raw,value=${{ matrix.from-version }},enable=${{ github.ref == 'refs/heads/main' }},priority=900 type=raw,value=${{ matrix.from-version }}-${{ github.head_ref || github.ref_name }},priority=600 - type=sha,prefix=${{ matrix.from-version }}-,format=short,enable={{is_default_branch}},priority=100 flavor: | - latest=${{ github.ref == format('refs/heads/{0}', 'main') && matrix.from-version == '22.04' }} + latest=${{ github.ref == 'refs/heads/main' && matrix.from-version == '22.04' }} labels: | - org.opencontainers.image.authors=['${{ env.REPOSITORY_LINK }}','${{ github.actor }}'] + org.opencontainers.image.authors='${{ env.REPOSITORY_LINK }},${{ github.actor }}' org.opencontainers.image.description=${{ github.event.repository.description }} org.opencontainers.image.documentation=${{ env.REPOSITORY_LINK }} org.opencontainers.image.revision=${{ env.SHA }} org.opencontainers.image.source=${{ github.repositoryUrl }} - org.opencontainers.image.title=${{ env.IMAGE_REPOSITORY }}:${{ github.head_ref || github.ref_name }} + org.opencontainers.image.title=${{ env.IMAGE_REPOSITORY }}:${{ matrix.from-version }}-${{ github.head_ref || github.ref_name }} org.opencontainers.image.url=${{ env.REPOSITORY_LINK }}/blob/${{ env.SHA }}/linux/${{ matrix.distro }}/Dockerfile org.opencontainers.image.vendor=${{ github.repository_owner }} env: + REGISTRY_IMAGE: ${{ format('{0}/{1}', env.REGISTRY, env.IMAGE_REPOSITORY) }} REPOSITORY_LINK: https://github.com/${{ github.repository }} - # Build and push Docker image with Buildx (don't push on PR) - # https://github.com/docker/build-push-action - - name: Build and push - id: build - uses: docker/build-push-action@v4 - with: - context: . - # github-token for the repository context - github-token: ${{ secrets.GITHUB_TOKEN }} - file: ./linux/${{ matrix.distro }}/Dockerfile - platforms: linux/amd64,linux/arm64 - labels: ${{ steps.meta.outputs.labels }} - tags: ${{ steps.meta.outputs.tags }} - build-args: | - FROM_IMAGE=buildpack-deps - FROM_VERSION_MAJOR=${{ matrix.from-version-major }} - FROM_VERSION_MINOR=${{ matrix.from-version-minor }} - FROM_FLAVOR=${{ matrix.from-flavor }} - DISTRO=${{ matrix.distro }} - CODENAME=${{ matrix.codename }} - # caching to speed up the build - cache-from: | - type=registry,ref=${{ env.REGISTRY_IMAGE }}:${{ matrix.from-version }}-${{ github.head_ref || github.ref_name }} - type=registry,ref=${{ env.REGISTRY_IMAGE }}:cache-${{ matrix.codename }} - # cache exporter doesn't work with docker driver - cache-to: | - type=registry,ref=${{ env.REGISTRY_IMAGE }}:cache-${{ matrix.codename }},mode=max - # this will give us some useful information about the build - provenance: mode=max - push: true - # outputs: type=image,name=${{ env.REGISTRY_IMAGE }}:${{ matrix.from-version }}-${{ github.head_ref || github.ref_name }},push=true + # # Build and push Docker image with Buildx (don't push on PR) + # # https://github.com/docker/build-push-action + # - name: Build and push + # id: build + # uses: docker/build-push-action@v4 + # with: + # context: . + # # github-token for the repository context + # github-token: ${{ secrets.GITHUB_TOKEN }} + # file: ./linux/${{ matrix.distro }}/Dockerfile + # platforms: ${{ matrix.platforms }} + # labels: ${{ steps.meta.outputs.labels }} + # tags: ${{ steps.meta.outputs.tags }} + # # tags: ${{ format('{0}:{1}-{2}', github.actor != 'nektos/act' && env.REGISTRY_IMAGE || env.IMAGE_REPOSITORY, matrix.from-version, github.head_ref || github.ref_name) }} + # build-args: | + # FROM_IMAGE=buildpack-deps + # FROM_VERSION_MAJOR=${{ matrix.from-version-major }} + # FROM_VERSION_MINOR=${{ matrix.from-version-minor }} + # FROM_FLAVOR=${{ matrix.from-flavor }} + # DISTRO=${{ matrix.distro }} + # CODENAME=${{ matrix.codename }} + # # caching to speed up the build + # cache-from: | + # ${{ format('type=registry,ref={0}:{1}', env.REGISTRY_IMAGE, matrix.from-version) }} + # ${{ format('type=registry,ref={0}:cache-{1}', env.REGISTRY_IMAGE, matrix.codename) }} + # # don't export cache on PR + # cache-to: ${{ github.ref == 'refs/heads/main' && format('type=registry,ref={0}:cache-{1},mode=max', env.REGISTRY_IMAGE, matrix.codename) || '' }} + # # this will give us some useful information about the build + # provenance: mode=max + # # push if not building with act + # push: ${{ github.ref == 'refs/heads/main' }} + # outputs: 'type=oci,dest=${{ env.PATH_TO_IMAGE }}' + # env: + # REGISTRY_IMAGE: ${{ format('{0}/{1}', env.REGISTRY, env.IMAGE_REPOSITORY) }} + + # Build and push Docker images + - name: build image + run: >- + docker build + --tag ${{ steps.meta.outputs.tags }} + --file linux/${{ matrix.distro }}/Dockerfile + --cache-from ${{ format('type=registry,ref={0}:{1}', env.REGISTRY_IMAGE, matrix.from-version) }} + --cache-from ${{ format('type=registry,ref={0}:cache-{1}', env.REGISTRY_IMAGE, matrix.codename) }} + --build-arg FROM_IMAGE='buildpack-deps' + --build-arg FROM_VERSION_MAJOR='${{ matrix.from-version-major }}' + --build-arg FROM_VERSION_MINOR='${{ matrix.from-version-minor }}' + --build-arg FROM_FLAVOR='${{ matrix.from-flavor }}' + --build-arg DISTRO='${{ matrix.distro }}' + --build-arg CODENAME='${{ matrix.codename }}' + ${{ fromJson(env.IS_MAIN) && '--push' || format('--output type=docker,dest={0}', env.PATH_TO_IMAGE) }} + --label org.opencontainers.image.authors='${{ env.REPOSITORY_LINK }}, ${{ github.actor }}' + --label org.opencontainers.image.description='${{ github.event.repository.description }}' + --label org.opencontainers.image.documentation='${{ env.REPOSITORY_LINK }}' + --label org.opencontainers.image.revision='${{ env.SHA }}' + --label org.opencontainers.image.source='${{ github.repositoryUrl }}' + --label org.opencontainers.image.title='${{ env.TITLE_TAG }}' + --label org.opencontainers.image.url='${{ env.REPOSITORY_LINK }}/blob/${{ env.SHA }}/linux/${{ matrix.distro }}/Dockerfile' + --label org.opencontainers.image.vendor='${{ github.repository_owner }}' + . env: + IS_MAIN: ${{ github.ref == 'refs/heads/main' }} REGISTRY_IMAGE: ${{ format('{0}/{1}', env.REGISTRY, env.IMAGE_REPOSITORY) }} + REPOSITORY_LINK: https://github.com/${{ github.repository }} + TITLE_TAG: ${{ format('{0}:{1}', env.IMAGE_REPOSITORY, github.head_ref || github.ref_name) }} + + # Just for debugging + - name: inspect FROM_TAG + continue-on-error: true + run: docker inspect ${{ env.FROM_TAG }} + - name: inspect steps.meta.outputs.tags + continue-on-error: true + run: docker inspect ${{ steps.meta.outputs.tags }} # vulnerability scanning to verify PRs - name: Docker Scout id: docker-scout - continue-on-error: true uses: docker/scout-action@v0.23.4 with: + # platform: linux/amd64 command: sbom,compare - image: ${{ steps.meta.outputs.tags }} - to: ${{ format('{0}/{1}:{2}', env.REGISTRY, env.IMAGE_REPOSITORY, matrix.from-version) }} - organization: ${{ github.repository_owner }} + image: ${{ github.ref == 'refs/heads/main' && steps.meta.outputs.tags || env.PATH_TO_IMAGE }} + type: ${{ github.ref == 'refs/heads/main' && 'image' || 'archive' }} + to: ${{ env.TO_TAG }} ignore-unchanged: true only-severities: critical - write-comment: ${{ github.actor != 'nektos/act' }} + write-comment: ${{ github.event_name == 'pull_request' && github.actor != 'nektos/act' }} keep-previous-comments: true - summary: ${{ github.actor != 'nektos/act' }} + summary: ${{ github.event_name == 'pull_request' && github.actor != 'nektos/act' }} github-token: ${{ secrets.GITHUB_TOKEN }} + organization: ${{ vars.DOCKERHUB_USER || github.repository_owner }} # ToDo: Move into a separate workflow and depend on ci and mega-linter approve-pr: diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml index b9991e1..e313737 100644 --- a/.github/workflows/mega-linter.yml +++ b/.github/workflows/mega-linter.yml @@ -37,6 +37,7 @@ jobs: - name: Checkout Code uses: actions/checkout@v3 with: + set-safe-directory: true # token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 # If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to improve performances diff --git a/.mega-linter.yml b/.mega-linter.yml index 6ae7e39..85e8493 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -10,7 +10,7 @@ APPLY_FIXES: all # all, none, or list of linter keys SHOW_ELAPSED_TIME: true FILEIO_REPORTER: false # DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass -FILTER_REGEX_EXCLUDE: '(megalinter-reports/)' +# FILTER_REGEX_EXCLUDE: '(\.*/megalinter-reports/\.*)' YAML_V8R_FILTER_REGEX_EXCLUDE: '(\.prettierrc\.yaml)' VALIDATE_ALL_CODEBASE: true SPELL_LYCHEE_FILTER_REGEX_EXCLUDE: '(.github/workflows|\.mega-linter\.yml)' diff --git a/.vscode/extensions.json b/.vscode/extensions.json index cad83e6..0c1c037 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,6 +1,5 @@ { "recommendations": [ - "AquaSecurityOfficial.trivy-vulnerability-scanner", "editorconfig.editorconfig", "esbenp.prettier-vscode", "exiasr.hadolint", diff --git a/.vscode/settings.json b/.vscode/settings.json index 0c8e61e..8d0d19a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,8 +30,11 @@ "editor.tabSize": 2 }, "shellformat.flag": "--indent 4 --binary-next-line --case-indent", + "yaml.format.singleQuote": true, "yaml.schemas": { - "https://json.schemastore.org/github-action.json": "./.github/actions/**.yml", - "https://json.schemastore.org/prettierrc.json": "./.prettierrc.yaml" + "https://json.schemastore.org/github-action.json": [ + "action.yaml", + "action.yml" + ] } } diff --git a/README.md b/README.md index fceae1e..1f0bd36 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ # 🐳 Docker images for [nektos/act](https://github.com/nektos/act) -[![Docker Pulls](https://badgen.net/docker/pulls/mauwii/ubuntu-act?icon=docker&label=pulls)](https://hub.docker.com/r/mauwii/ubuntu-act/) -[![Docker Image Size](https://badgen.net/docker/size/mauwii/ubuntu-act?icon=docker&label=image%20size)](https://hub.docker.com/r/mauwii/ubuntu-act/) -[![Docker Stars](https://badgen.net/docker/stars/mauwii/ubuntu-act?icon=docker&label=stars)](https://hub.docker.com/r/mauwii/ubuntu-act/) -[![Github stars](https://badgen.net/github/stars/mauwii/act-docker-images?icon=github&label=stars)](https://github.com/mauwii/act-docker-images) -[![Github forks](https://badgen.net/github/forks/mauwii/act-docker-images?icon=github&label=forks)](https://github.com/mauwii/act-docker-images/fork) -[![Github issues](https://badgen.net/github/issues/mauwii/act-docker-images/?icon=github&label=issues)](https://github.com/mauwii/act-docker-images/issues) -[![Github last-commit](https://badgen.net/github/last-commit/mauwii/act-docker-images/?color=blue&icon=github&label=last-commit)](https://github.com/mauwii/act-docker-images/commits/) - -[![ci](https://github.com/mauwii/act-docker-images/actions/workflows/ci.yml/badge.svg?branch=main&event=push)](https://github.com/mauwii/act-docker-images/actions/workflows/ci.yml) -[![Docker-Hub description](https://github.com/mauwii/act-docker-images/actions/workflows/dockerhub-description.yml/badge.svg?branch=main)](https://github.com/mauwii/act-docker-images/actions/workflows/dockerhub-description.yml) -[![MegaLinter](https://github.com/mauwii/act-docker-images/workflows/MegaLinter/badge.svg?branch=main)](https://github.com/mauwii/act-docker-images/actions?query=workflow%3AMegaLinter+branch%3Amain) +[![Docker Pulls](https://badgen.net/docker/pulls/mauwii/ubuntu-act?icon=docker&label=pulls)][dockerHub] +[![Docker Image Size](https://badgen.net/docker/size/mauwii/ubuntu-act?icon=docker&label=image%20size)][dockerHub] +[![Docker Stars](https://badgen.net/docker/stars/mauwii/ubuntu-act?icon=docker&label=stars)][dockerHub] +[![Github stars](https://badgen.net/github/stars/mauwii/act-docker-images?icon=github&label=stars)][githubRepo] +[![Github forks](https://badgen.net/github/forks/mauwii/act-docker-images?icon=github&label=forks)][githubFork] +[![Github issues](https://badgen.net/github/issues/mauwii/act-docker-images/?icon=github&label=issues)][githubIssues] +[![Github last-commit](https://badgen.net/github/last-commit/mauwii/act-docker-images/?color=blue&icon=github&label=last-commit)][githubCommits] + +[![ci](https://github.com/mauwii/act-docker-images/actions/workflows/ci.yml/badge.svg?branch=main&event=push)][workflowCi] +[![Docker-Hub description](https://github.com/mauwii/act-docker-images/actions/workflows/dockerhub-description.yml/badge.svg?branch=main)][workflowDhDesc] +[![MegaLinter](https://github.com/mauwii/act-docker-images/workflows/MegaLinter/badge.svg?branch=main&event=push)][workflowMegaLinter] ## ⚠️ Heavily under construction... ⚠️ @@ -18,16 +18,15 @@ ## What -The docker images in this repository can be used with [nektos/act](https://github.com/nektos/act), -which is a very handy tool to run your github workflows locally. +The docker images in this repository can be used with [nektos/act][nektosActRepo], which is a very +handy tool to run your github workflows locally. If you don't know it yet, I highly recommend to check it out 🤓 ## Why In the other Images I had problems with executing azure related tools, so I decided to create my own -image which is heavily inspired by the images of -[catthehacker](https://github.com/catthehacker/docker_images) +image which is heavily inspired by the images of [catthehacker][catthehackerImages] ## How to use @@ -42,8 +41,8 @@ The easiest way is to add those lines in your `~/.actrc`: -P ubuntu-20.04=mauwii/ubuntu-act:20.04 ``` -For further Informations about nektos/arc and how to use it, checkout the -[nektos documentation📖](https://nektosact.com/beginner/index.html) +For further Informations about nektos/arc and how to use it, checkout the [nektos +documentation📖][nektosDocs] ## How I run act on my M2-Max 💻 @@ -59,13 +58,6 @@ For further Informations about nektos/arc and how to use it, checkout the alias act='gh act -s GITHUB_TOKEN="$(gh auth token)"' ``` -- export DOCKER_HOST env - - ```bash - DOCKER_HOST=$(docker context inspect --format '{{.Endpoints.docker.Host}}') - export DOCKER_HOST - ``` - - Docker-Desktop settings: - Advanced: @@ -76,6 +68,23 @@ For further Informations about nektos/arc and how to use it, checkout the ✔️ All Beta Features enabled (containerd, wasm, rosetta and builds view) + - Docker Engine (`~/.docker/daemon.json`): + + ```json + { + "builder": { + "gc": { + "defaultKeepStorage": "20GB", + "enabled": true + } + }, + "experimental": true, + "features": { + "buildkit": true + } + } + ``` + - `~/.actrc`: ```text @@ -95,3 +104,21 @@ npx mega-linter-runner \ -e GITHUB_TOKEN="$(gh auth token)" \ --remove-container ``` + +[dockerHub]: https://hub.docker.com/r/mauwii/ubuntu-act/ "DockerHub" +[githubRepo]: https://github.com/mauwii/act-docker-images/ "GitHub repository" +[githubFork]: https://github.com/mauwii/act-docker-images/fork/ "GitHub forks" +[githubIssues]: https://github.com/mauwii/act-docker-images/issues/ "GitHub issues" +[githubCommits]: https://github.com/mauwii/act-docker-images/commits/ "GitHub commits" +[workflowCi]: https://github.com/mauwii/act-docker-images/actions/workflows/ci.yml "ci workflow" +[workflowDhDesc]: + https://github.com/mauwii/act-docker-images/actions/workflows/dockerhub-description.yml + "DockerHub Description Workflow" +[workflowMegaLinter]: + https://github.com/mauwii/act-docker-images/actions?query=workflow%3AMegaLinter+branch%3Amain + "MegaLinter Workflow" +[nektosActRepo]: https://github.com/nektos/act "nektos/act git repository" +[catthehackerImages]: + https://github.com/catthehacker/docker_images + "catthehacker/docker_images repo" +[nektosDocs]: https://nektosact.com/beginner/index.html "nektos/act docs"