#!/bin/bash set -euf -o pipefail +x scripts=$(dirname $0) # shellcheck source=jenkins-helpers.sh . $scripts/jenkins-helpers.sh convert_args_to_variables "$@" obligatory_variables ci_bot project pw_token out_dir declare ci_bot project pw_token out_dir verbose="${verbose-true}" if $verbose; then set -x fi (set +x; pw_init "$project" "$pw_token") # Delete patches from the queue bundle. The fact that we are here means # that the jenkins queue is empty, and no more patches will be tested. # This can happen if a new version of series was uploaded and we tested # a different top-of-series patch. # We avoid deleting and re-creatthe queued bundles to conserve bundle IDs. queued_name=$(pw_bundle_name queued "$ci_bot") queued_id=$(pw_bundle_id "$project" "$queued_name" || true) while [ "$queued_id" != "" ]; do patch_id=$(pw_get_patch_from_bundle_or_series \ "$project" bundle "$queued_id" 0) git -C "$project" pw bundle remove -f yaml "$queued_id" "$patch_id" & if ! wait $!; then # "bundle remove" will refuse to delete the last patch. break fi done triggered_name=$(pw_bundle_name triggered "$ci_bot") triggered_id=$(pw_bundle_id "$project" "$triggered_name" || true) yaml=$(mktemp) trap "rm -f $yaml" EXIT git -C "$project" pw series list -f yaml > "$yaml" mkdir -p "$out_dir" len=$(shyaml get-length < "$yaml") i=$len j=0 # Go through series with the oldest first. while [ "$i" -gt "0" ]; do i=$(($i - 1 )) series_id=$(shyaml get-value $i.id < "$yaml") if ! pw_series_complete_p "$project" "$series_id"; then continue fi num_patch=0 while true; do patch_id=$(pw_get_patch_from_bundle_or_series \ "$project" series "$series_id" "$num_patch" || true) if [ "$patch_id" = "" ]; then break fi if ! pw_bundle_has_patch_p "$project" "$triggered_id" "$patch_id"; then break fi num_patch=$(($num_patch + 1)) done if [ "$patch_id" = "" ]; then continue fi j=$(($j + 1)) cat > "$out_dir/trigger-precommit-$project-$j-$series_id" <