#!/bin/bash SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) if [[ "$*" = *--view* ]]; then VIEW_ONLY=1 fi : ${WORKFLOW:=npm-publish.yml} : ${JOB:=publish-npm} : ${BRANCH:=github-workflows} : ${VERSION:="minor (x.y+1.0, new functionality)"} WORKFLOW_FILE="$SCRIPT_DIR/../.github/workflows/$WORKFLOW_FILE" function echo-var { echo "$1=${!1}" } function upload-changes { git diff --quiet "$WORKFLOW_FILE" if [ $? -eq 1 ]; then echo "Uploading changes" git add "$WORKFLOW_FILE" git commit -m "Update $WORKFLOW_FILE" # git push origin "$BRANCH" git push origin "$BRANCH" -f fi } function run-workflow { LAST_RUN_ID=$(gh run list --workflow="$WORKFLOW" --json number,databaseId --jq 'sort_by(.number) | .[-1] | .databaseId') if [ -n "$WORKFLOW_ARGS" ]; then WORKFLOW_ARGS=($WORKFLOW_ARGS) else if [ "$WORKFLOW" = "npm-publish.yml" ]; then WORKFLOW_ARGS=(-f "version=$VERSION") fi fi gh workflow run "$WORKFLOW" --ref "$BRANCH" "${WORKFLOW_ARGS[@]}" RUN_ID="$LAST_RUN_ID" } function view-workflow { while [ "$RUN_ID" = "$LAST_RUN_ID" ]; do MOST_RECENT_RUN=$(gh run list --workflow="$WORKFLOW" --json number,databaseId,status --jq 'sort_by(.number) | .[-1] | "\(.databaseId);\(.status)"') RUN_ID=${MOST_RECENT_RUN%;*} RUN_STATUS=${MOST_RECENT_RUN#*;} done if [ "$RUN_STATUS" != "completed" ]; then gh run watch $RUN_ID fi gh run view $RUN_ID --log | grep "$JOB" | grep -v '@v' if [ $? -ne 0 ]; then # xargs is only used for trimming ANNOTATION=$(curl "https://github.com/aadsm/jschardet/actions/runs/$RUN_ID" 2>/dev/null | grep 'annotation-message.annotationContainer' -A 1 | tail -n 1 | xargs) ANNOTATION=${ANNOTATION##