diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 618a74a..5d41b98 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,13 +19,3 @@ updates: - ChristophShyper labels: - automatic - -# # Enable version updates for pip -# - package-ecosystem: pip -# directory: "/" -# schedule: -# interval: daily -# assignees: -# - ChristophShyper -# labels: -# - automatic diff --git a/.github/workflows/CRON.yml b/.github/workflows/CRON.yml index 40c6ada..0ffeff8 100644 --- a/.github/workflows/CRON.yml +++ b/.github/workflows/CRON.yml @@ -7,15 +7,28 @@ on: jobs: build_and_push: - name: Build and push images - runs-on: ubuntu-latest + name: Build & push + runs-on: ubuntu-24.04-arm steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - - name: Build Docker image and push to registry + - name: Docker Buildx + uses: docker/setup-buildx-action@v3.9.0 + with: + install: true + + - name: QEMU + uses: docker/setup-qemu-action@v3.4.0 + with: + image: tonistiigi/binfmt:latest + platforms: amd64,arm64 + + - name: Build & push env: + DOCKER_BUILDKIT: 1 DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TERM: xterm-256color - run: make build + run: make push VERSION_PREFIX=test- + diff --git a/.github/workflows/PUSH-MASTER.yml b/.github/workflows/PUSH-MASTER.yml index e42ebaf..8186056 100644 --- a/.github/workflows/PUSH-MASTER.yml +++ b/.github/workflows/PUSH-MASTER.yml @@ -7,52 +7,59 @@ on: jobs: labels: - name: Update repo labels - runs-on: ubuntu-latest + name: Repo labels + runs-on: ubuntu-24.04-arm steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Download labels' config + - name: Labels' config shell: bash run: | mkdir -p .tmp curl -LsS https://raw.githubusercontent.com/devops-infra/.github/master/.github/labels.yml -o .tmp/labels.yml - name: Update labels - uses: crazy-max/ghaction-github-labeler@v4.1.0 + uses: crazy-max/ghaction-github-labeler@v5.2.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} yaml-file: .tmp/labels.yml lint: - name: Run linters - runs-on: ubuntu-latest + name: Linters + runs-on: ubuntu-24.04-arm steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - - name: Docker Lint - uses: luke142367/Docker-Lint-Action@v1.1.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Haskell Dockerfile Linter (Hadolint) - uses: brpaz/hadolint-action@v1.5.0 + - name: Hadolint + uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile build_and_push: - name: Build and push images + name: Build & push needs: lint - runs-on: ubuntu-latest + runs-on: ubuntu-24.04-arm steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 + + - name: Docker Buildx + uses: docker/setup-buildx-action@v3.9.0 + with: + install: true + + - name: QEMU + uses: docker/setup-qemu-action@v3.4.0 + with: + image: tonistiigi/binfmt:latest + platforms: amd64,arm64 - - name: Build Docker image and push to registry + - name: Build & push env: + DOCKER_BUILDKIT: 1 DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TERM: xterm-256color - run: make build push + run: make push diff --git a/.github/workflows/PUSH-OTHER.yml b/.github/workflows/PUSH-OTHER.yml index 41ec807..f74b5e8 100644 --- a/.github/workflows/PUSH-OTHER.yml +++ b/.github/workflows/PUSH-OTHER.yml @@ -7,73 +7,83 @@ on: jobs: labels: - name: Update repo labels - runs-on: ubuntu-latest + name: Repo labels + runs-on: ubuntu-24.04-arm steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - - name: Download labels' config + - name: Labels' config shell: bash run: | mkdir -p .tmp curl -LsS https://raw.githubusercontent.com/devops-infra/.github/master/.github/labels.yml -o .tmp/labels.yml - - name: Update labels - dry run - uses: crazy-max/ghaction-github-labeler@v4.1.0 + - name: Update labels (dry run) + uses: crazy-max/ghaction-github-labeler@v5.2.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} yaml-file: .tmp/labels.yml dry-run: true lint: - name: Run linters + name: Linters if: "!startsWith(github.ref, 'refs/heads/dependabot')" - runs-on: ubuntu-latest + runs-on: ubuntu-24.04-arm steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - - name: Docker Lint - uses: luke142367/Docker-Lint-Action@v1.1.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Haskell Dockerfile Linter (Hadolint) - uses: brpaz/hadolint-action@v1.5.0 + - name: Hadolint + uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile - build: - name: Build image - runs-on: ubuntu-latest + build_and_push: + name: Build & push + if: "!startsWith(github.ref, 'refs/heads/dependabot')" + runs-on: ubuntu-24.04-arm steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - - name: Build Docker image + - name: Docker Buildx + uses: docker/setup-buildx-action@v3.9.0 + with: + install: true + + - name: QEMU + uses: docker/setup-qemu-action@v3.4.0 + with: + image: tonistiigi/binfmt:latest + platforms: amd64,arm64 + + - name: Build & push env: + DOCKER_BUILDKIT: 1 + DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TERM: xterm-256color - run: make build + run: make push VERSION_PREFIX=test- pull_request: name: Create Pull Request - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Download Pull Request template + - name: Template shell: bash run: | mkdir -p .tmp curl -LsS https://raw.githubusercontent.com/devops-infra/.github/master/PULL_REQUEST_TEMPLATE.md -o .tmp/PULL_REQUEST_TEMPLATE.md - - name: Create pull request - bugfix (conditional) - if: startsWith(github.ref, 'refs/heads/bugfix') - uses: devops-infra/action-pull-request@v0.5.2 + - name: PR - bugfix (conditional) + if: startsWith(github.ref, 'refs/heads/bug') + uses: devops-infra/action-pull-request@v0.5.5 with: github_token: ${{ secrets.GITHUB_TOKEN }} assignee: ${{ github.actor }} @@ -81,9 +91,9 @@ jobs: template: .tmp/PULL_REQUEST_TEMPLATE.md get_diff: true - - name: Create pull request - dependency (conditional) - if: startsWith(github.ref, 'refs/heads/dependency') - uses: devops-infra/action-pull-request@v0.5.2 + - name: PR - dependency (conditional) + if: "startsWith(github.ref, 'refs/heads/dep') && !startsWith(github.ref, 'refs/heads/dependabot')" + uses: devops-infra/action-pull-request@v0.5.5 with: github_token: ${{ secrets.GITHUB_TOKEN }} assignee: ${{ github.actor }} @@ -91,9 +101,9 @@ jobs: template: .tmp/PULL_REQUEST_TEMPLATE.md get_diff: true - - name: Create pull request - documentation (conditional) - if: startsWith(github.ref, 'refs/heads/documentation') - uses: devops-infra/action-pull-request@v0.5.2 + - name: PR - documentation (conditional) + if: startsWith(github.ref, 'refs/heads/doc') + uses: devops-infra/action-pull-request@v0.5.5 with: github_token: ${{ secrets.GITHUB_TOKEN }} assignee: ${{ github.actor }} @@ -101,9 +111,9 @@ jobs: template: .tmp/PULL_REQUEST_TEMPLATE.md get_diff: true - - name: Create pull request - feature (conditional) - if: startsWith(github.ref, 'refs/heads/feature') - uses: devops-infra/action-pull-request@v0.5.2 + - name: PR - feature (conditional) + if: startsWith(github.ref, 'refs/heads/feat') + uses: devops-infra/action-pull-request@v0.5.5 with: github_token: ${{ secrets.GITHUB_TOKEN }} assignee: ${{ github.actor }} @@ -111,9 +121,9 @@ jobs: template: .tmp/PULL_REQUEST_TEMPLATE.md get_diff: true - - name: Create pull request - test (conditional) + - name: PR - test (conditional) if: startsWith(github.ref, 'refs/heads/test') - uses: devops-infra/action-pull-request@v0.5.2 + uses: devops-infra/action-pull-request@v0.5.5 with: github_token: ${{ secrets.GITHUB_TOKEN }} assignee: ${{ github.actor }} @@ -123,9 +133,9 @@ jobs: draft: true get_diff: true - - name: Create pull request - other (conditional) - if: "!startsWith(github.ref, 'refs/heads/bugfix') && !startsWith(github.ref, 'refs/heads/dependabot') && !startsWith(github.ref, 'refs/heads/dependency') && !startsWith(github.ref, 'refs/heads/documentation') && !startsWith(github.ref, 'refs/heads/feature') && !startsWith(github.ref, 'refs/heads/test')" - uses: devops-infra/action-pull-request@v0.5.2 + - name: PR - test (conditional) + if: "!startsWith(github.ref, 'refs/heads/bug') && !startsWith(github.ref, 'refs/heads/dep') && !startsWith(github.ref, 'refs/heads/doc') && !startsWith(github.ref, 'refs/heads/feat') && !startsWith(github.ref, 'refs/heads/test')" + uses: devops-infra/action-pull-request@v0.5.5 with: github_token: ${{ secrets.GITHUB_TOKEN }} assignee: ${{ github.actor }} diff --git a/Dockerfile b/Dockerfile index 30049e4..05a30be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,28 @@ # Use a clean tiny image to store artifacts in -FROM ubuntu:jammy-20221101 +FROM ubuntu:24.04 + +# Multi-architecture from buildx +ARG TARGETPLATFORM + +# Copy all needed files +COPY entrypoint.sh / + +# Install needed packages +SHELL ["/bin/bash", "-euxo", "pipefail", "-c"] +# hadolint ignore=DL3008 +RUN chmod +x /entrypoint.sh ;\ + apt-get update -y ;\ + apt-get install --no-install-recommends -y \ + gpg-agent \ + software-properties-common ;\ + add-apt-repository ppa:git-core/ppa ;\ + apt-get update -y ;\ + apt-get install --no-install-recommends -y \ + git \ + git-lfs ;\ + apt-get clean ;\ + rm -rf /var/lib/apt/lists/* + # Labels for http://label-schema.org/rc1/#build-time-labels # And for https://github.com/opencontainers/image-spec/blob/master/annotations.md @@ -8,7 +31,7 @@ ARG NAME="GitHub Action for committing changes to a repository" ARG DESCRIPTION="GitHub Action that will create a new commit and push it back to the repository" ARG REPO_URL="https://github.com/devops-infra/action-commit-push" ARG AUTHOR="Krzysztof Szyper / ChristophShyper / biotyk@mail.com" -ARG HOMEPAGE="https://christophshyper.github.io/" +ARG HOMEPAGE="https://shyper.pro" ARG BUILD_DATE=2020-04-01T00:00:00Z ARG VCS_REF=abcdef1 ARG VERSION=v0.0 @@ -42,25 +65,6 @@ LABEL \ maintainer="${AUTHOR}" \ repository="${REPO_URL}" -# Copy all needed files -COPY entrypoint.sh / - -# Install needed packages -SHELL ["/bin/bash", "-euxo", "pipefail", "-c"] -# hadolint ignore=DL3008 -RUN chmod +x /entrypoint.sh ;\ - apt-get update -y ;\ - apt-get install --no-install-recommends -y \ - gpg-agent \ - software-properties-common ;\ - add-apt-repository ppa:git-core/ppa ;\ - apt-get update -y ;\ - apt-get install --no-install-recommends -y \ - git \ - git-lfs ;\ - apt-get clean ;\ - rm -rf /var/lib/apt/lists/* - # Finish up WORKDIR /github/workspace ENTRYPOINT ["/entrypoint.sh"] diff --git a/Makefile b/Makefile index 17d57fd..b060fb3 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,13 @@ -.PHONY: help build push +.PHONY: phony phony: help # Release tag for the action -VERSION := v0.9.2 +VERSION := v0.10.0 # GitHub Actions bogus variables GITHUB_REF ?= refs/heads/null GITHUB_SHA ?= aabbccddeeff +VERSION_PREFIX ?= # Other variables and constants CURRENT_BRANCH := $(shell echo $(GITHUB_REF) | sed 's/refs\/heads\///') @@ -16,8 +17,19 @@ DOCKER_USER_ID := christophshyper DOCKER_ORG_NAME := devopsinfra DOCKER_IMAGE := action-commit-push DOCKER_NAME := $(DOCKER_ORG_NAME)/$(DOCKER_IMAGE) +GITHUB_USER_ID := ChristophShyper +GITHUB_ORG_NAME := devops-infra +GITHUB_NAME := ghcr.io/$(GITHUB_ORG_NAME)/$(DOCKER_IMAGE) BUILD_DATE := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") +# Recognize whether docker buildx is installed or not +DOCKER_CHECK := $(shell docker buildx version 1>&2 2>/dev/null; echo $$?) +ifeq ($(DOCKER_CHECK),0) +DOCKER_COMMAND := docker buildx build --platform linux/amd64,linux/arm64 +else +DOCKER_COMMAND := docker build +endif + # Some cosmetics SHELL := bash TXT_RED := $(shell tput setaf 1) @@ -30,29 +42,52 @@ define NL endef # Main actions + +.PHONY: help help: ## Display help prompt $(info Available options:) @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "$(TXT_YELLOW)%-25s $(TXT_RESET) %s\n", $$1, $$2}' -build: ## Build Docker image + +.PHONY: build +build: ## Build Docker images $(info $(NL)$(TXT_GREEN) == STARTING BUILD ==$(TXT_RESET)) $(info $(TXT_GREEN)Release tag:$(TXT_YELLOW) $(VERSION)$(TXT_RESET)) $(info $(TXT_GREEN)Current branch:$(TXT_YELLOW) $(CURRENT_BRANCH)$(TXT_RESET)) $(info $(TXT_GREEN)Commit hash:$(TXT_YELLOW) $(GITHUB_SHORT_SHA)$(TXT_RESET)) $(info $(TXT_GREEN)Build date:$(TXT_YELLOW) $(BUILD_DATE)$(TXT_RESET)) - $(info $(NL)$(TXT_GREEN)Building Docker image:$(TXT_YELLOW) $(DOCKER_NAME):$(VERSION)$(TXT_RESET)) - @docker build \ + $(info $(NL)$(TXT_GREEN)Building image: $(TXT_YELLOW)$(DOCKER_NAME):$(VERSION_PREFIX)$(VERSION) $(TXT_GREEN)and $(TXT_YELLOW)$(GITHUB_NAME):$(VERSION_PREFIX)$(VERSION)$(TXT_RESET)$(NL)) + @$(DOCKER_COMMAND) \ --build-arg BUILD_DATE=$(BUILD_DATE) \ --build-arg VCS_REF=$(GITHUB_SHORT_SHA) \ --build-arg VERSION=$(VERSION) \ --file=Dockerfile \ - --tag=$(DOCKER_NAME):$(VERSION) . + --tag=$(DOCKER_NAME):$(VERSION_PREFIX)$(VERSION) \ + --tag=$(DOCKER_NAME):$(VERSION_PREFIX)latest \ + --tag=$(GITHUB_NAME):$(VERSION_PREFIX)$(VERSION) \ + --tag=$(GITHUB_NAME):$(VERSION_PREFIX)latest . + @echo -e "\n$(TXT_GREEN)Build images: $(TXT_YELLOW)$(DOCKER_NAME):$(VERSION_PREFIX)$(VERSION) $(TXT_GREEN)and $(TXT_YELLOW)$(GITHUB_NAME):$(VERSION_PREFIX)$(VERSION)$(TXT_RESET)" -push: ## Push to DockerHub - $(info $(NL)$(TXT_GREEN) == STARTING DEPLOYMENT == $(TXT_RESET)) - $(info $(NL)$(TXT_GREEN)Logging-in to DockerHub$(TXT_RESET)) + +.PHONY: login +login: ## Log into all registries + @echo -e "\n$(TXT_GREEN)Logging to: $(TXT_YELLOW)Docker Hub$(TXT_RESET)" @echo $(DOCKER_TOKEN) | docker login -u $(DOCKER_USER_ID) --password-stdin - $(info $(NL)$(TXT_GREEN)Pushing Docker image:$(TXT_YELLOW) $(DOCKER_NAME):$(VERSION)$(TXT_RESET)) - @docker tag $(DOCKER_NAME):$(VERSION) $(DOCKER_NAME):latest - @docker push $(DOCKER_NAME):$(VERSION) - @docker push $(DOCKER_NAME):latest + @echo -e "\n$(TXT_GREEN)Logging to: $(TXT_YELLOW)GitHub Packages$(TXT_RESET)" + @echo $(GITHUB_TOKEN) | docker login ghcr.io -u $(GITHUB_USER_ID) --password-stdin + + +.PHONY: push +push: login ## Push Docker images + $(info $(NL)$(TXT_GREEN) == STARTING DEPLOYMENT == $(TXT_RESET)) + $(info $(NL)$(TXT_GREEN)Pushing image: $(TXT_YELLOW)$(DOCKER_NAME):$(VERSION_PREFIX)$(VERSION) $(TXT_GREEN)and $(TXT_YELLOW)$(GITHUB_NAME):$(VERSION_PREFIX)$(VERSION)$(TXT_RESET)$(NL)) + @$(DOCKER_COMMAND) --push \ + --build-arg BUILD_DATE=$(BUILD_DATE) \ + --build-arg VCS_REF=$(GITHUB_SHORT_SHA) \ + --build-arg VERSION=$(VERSION) \ + --file=Dockerfile \ + --tag=$(DOCKER_NAME):$(VERSION_PREFIX)$(VERSION) \ + --tag=$(DOCKER_NAME):$(VERSION_PREFIX)latest \ + --tag=$(GITHUB_NAME):$(VERSION_PREFIX)$(VERSION) \ + --tag=$(GITHUB_NAME):$(VERSION_PREFIX)latest . + @echo -e "\n$(TXT_GREEN)Pushed images: $(TXT_YELLOW)$(DOCKER_NAME):$(VERSION_PREFIX)$(VERSION) $(TXT_GREEN)and $(TXT_YELLOW)$(GITHUB_NAME):$(VERSION_PREFIX)$(VERSION)$(TXT_RESET)" diff --git a/README.md b/README.md index 2d7ba6f..1e23e67 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@ -# GitHub Action for committing changes to a repository +# GitHub Action for committing changes to a repository. -**GitHub Action that will create a new commit and push it back to the repository.** +## GitHub Action that will create a new commit and push it back to the repository. + +### Supporting `amd64` and `aarch64/arm64` images! + +Available in Docker Hub: [devopsinfra/action-commit-push:latest](https://hub.docker.com/repository/docker/devopsinfra/action-commit-push) + +And GitHub Packages: [ghcr.io/devops-infra/docker-terragrunt/docker-terragrunt:latest](https://github.com/devops-infra/action-commit-push/packages) -Dockerized as [devopsinfra/action-commit-push](https://hub.docker.com/repository/docker/devopsinfra/action-commit-push). Features: * Can add a custom prefix to commit message title by setting `commit_prefix`. @@ -79,7 +84,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@master - name: Change something run: | find . -type f -name "*.md" -print0 | xargs -0 sed -i "s/foo/bar/g" @@ -100,7 +105,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@master - name: Change something run: | find . -type f -name "*.md" -print0 | xargs -0 sed -i "s/foo/bar/g" diff --git a/action.yml b/action.yml index c1ebea0..9f086c8 100644 --- a/action.yml +++ b/action.yml @@ -45,7 +45,7 @@ outputs: description: Name of the branch code was pushed into runs: using: docker - image: docker://devopsinfra/action-commit-push:v0.9.2 + image: docker://devopsinfra/action-commit-push:v0.10.0 env: GITHUB_TOKEN: ${{ inputs.github_token }} branding: