From a4c1ce440f23167f3b3c297de6e48b23daca3d69 Mon Sep 17 00:00:00 2001 From: DeveloperC Date: Sat, 20 Apr 2024 02:21:47 +0100 Subject: [PATCH] ci: adding clean Git history checking (#12) --- .github/workflows/git-history.yml | 22 +++++++++++ Earthfile | 19 ++++++++++ ci/check-clean-git-history.sh | 61 +++++++++++++++++++++++++++++++ 3 files changed, 102 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..dab2e30 --- /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.6. + run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.6/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 8344424..b64bbf9 100644 --- a/Earthfile +++ b/Earthfile @@ -6,6 +6,25 @@ COPY_CI_DATA: COPY --dir "ci/" ".github/" "./" +COPY_METADATA: + COMMAND + DO +COPY_CI_DATA + COPY --dir ".git/" "./" + + +rust-base: + FROM rust:1.70.0 + WORKDIR "/nasm-x86-shellcode-generator" + + +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}" + + check-github-actions-workflows-linting: FROM golang:1.20.13 RUN go install github.com/rhysd/actionlint/cmd/actionlint@v1.6.26 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