From 81122c5e4b40aa537045cd0913636388b2a28a9e Mon Sep 17 00:00:00 2001 From: DeveloperC Date: Wed, 4 Sep 2024 13:37:37 +0100 Subject: [PATCH] ci: adding clean Git history workflow --- .github/workflows/git-history.yml | 22 +++++++++++ Earthfile | 18 +++++++++ ci/check-clean-git-history.sh | 61 +++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 .github/workflows/git-history.yml create mode 100755 ci/check-clean-git-history.sh diff --git a/.github/workflows/git-history.yml b/.github/workflows/git-history.yml new file mode 100644 index 0000000..8a9138a --- /dev/null +++ b/.github/workflows/git-history.yml @@ -0,0 +1,22 @@ +name: Git History + +on: pull_request + +env: + # Forcing Earthly to use colours, to make reading output easier. + FORCE_COLOR: 1 + +jobs: + clean: + name: Clean + runs-on: ubuntu-latest + steps: + - name: Download Earthly v0.8.12. + run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.12/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'" + - name: Checkout code. + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + - name: Check clean Git history. + run: earthly --ci +check-clean-git-history --from_reference "origin/${{ github.base_ref }}" diff --git a/Earthfile b/Earthfile index ae8dbe6..0117c6b 100644 --- a/Earthfile +++ b/Earthfile @@ -6,6 +6,24 @@ COPY_CI_DATA: COPY --dir "ci/" ".github/" "./" +COPY_METADATA: + COMMAND + DO +COPY_CI_DATA + COPY --dir ".git/" "./" + + +rust-base: + FROM rust:1.70.0 + + +check-clean-git-history: + FROM +rust-base + RUN cargo install clean_git_history --version 0.1.2 --locked + DO +COPY_METADATA + ARG from_reference="origin/HEAD" + RUN ./ci/check-clean-git-history.sh --from-reference "${from_reference}" + + golang-base: FROM golang:1.22.1 ENV GOPROXY=direct diff --git a/ci/check-clean-git-history.sh b/ci/check-clean-git-history.sh new file mode 100755 index 0000000..4ca75fb --- /dev/null +++ b/ci/check-clean-git-history.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +# ARG_OPTIONAL_SINGLE([from-reference],[],[],[origin/HEAD]) +# ARGBASH_GO() +# needed because of Argbash --> m4_ignore([ +### START OF CODE GENERATED BY Argbash v2.9.0 one line above ### +# Argbash is a bash code generator used to get arguments parsing right. +# Argbash is FREE SOFTWARE, see https://argbash.io for more info +# Generated online by https://argbash.io/generate + +die() { + local _ret="${2:-1}" + test "${_PRINT_HELP:-no}" = yes && print_help >&2 + echo "$1" >&2 + exit "${_ret}" +} + +begins_with_short_option() { + local first_option all_short_options='' + first_option="${1:0:1}" + test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0 +} + +# THE DEFAULTS INITIALIZATION - OPTIONALS +_arg_from_reference="origin/HEAD" + +print_help() { + printf 'Usage: %s [--from-reference ]\n' "$0" +} + +parse_commandline() { + while test $# -gt 0; do + _key="$1" + case "$_key" in + --from-reference) + test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 + _arg_from_reference="$2" + shift + ;; + --from-reference=*) + _arg_from_reference="${_key##--from-reference=}" + ;; + *) + _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1 + ;; + esac + shift + done +} + +parse_commandline "$@" + +# OTHER STUFF GENERATED BY Argbash + +### END OF CODE GENERATED BY Argbash (sortof) ### ]) +# [ <-- needed because of Argbash +set -o errexit +set -o xtrace + +"${CARGO_HOME}/bin/clean_git_history" --from-reference "${_arg_from_reference}" +# ] <-- needed because of Argbash