diff --git a/bin/job b/bin/job index 23db0ad7..fd700081 100755 --- a/bin/job +++ b/bin/job @@ -30,6 +30,19 @@ bail() ( exit 1 ) +mark_commit_passed() ( + set -euo pipefail + + mkdir -p ".gitlab-ci.d/passed/$1" + touch ".gitlab-ci.d/passed/$1/$(git rev-parse HEAD)" +) + +commit_passed() ( + set -euo pipefail + + [[ -f ".gitlab-ci.d/passed/$1/$(git rev-parse HEAD)" ]] +) + run() ( set -euo pipefail @@ -59,7 +72,15 @@ run() ( <(git rev-list --reverse "$CI_MERGE_REQUEST_DIFF_BASE_SHA..HEAD") for commit in "${commits[@]}"; do git checkout "$commit" + + if commit_passed "$job"; then + echo "Skipping commit because it already passed: $commit" + continue + fi + job_"$job" || bail + + mark_commit_passed "$job" done fi )