github.com/spinnaker/spin@v1.30.0/.github/workflows/release_info.sh (about) 1 #!/bin/bash -x 2 3 NEW_TAG=${GITHUB_REF/refs\/tags\//} 4 export NEW_TAG 5 echo "NEW_TAG=$NEW_TAG" 6 # Glob match previous tags which should be format v1.2.3. Avoids Deck's npm tagging. 7 PREVIOUS_TAG=$(git describe --abbrev=0 --tags "${NEW_TAG}"^ --match 'v[0-9]*') 8 export PREVIOUS_TAG 9 echo "PREVIOUS_TAG=$PREVIOUS_TAG" 10 CHANGELOG=$(git log "$NEW_TAG"..."$PREVIOUS_TAG" --oneline) 11 export CHANGELOG 12 echo "CHANGELOG=$CHANGELOG" 13 14 # Format the changelog so it's markdown compatible 15 CHANGELOG="${CHANGELOG//$'%'/%25}" 16 CHANGELOG="${CHANGELOG//$'\n'/%0A}" 17 CHANGELOG="${CHANGELOG//$'\r'/%0D}" 18 19 # If the previous release tag is the same as this tag the user likely cut a release (and in the process created a tag), which means we can skip the need to create a release 20 SKIP_RELEASE=$([[ "$PREVIOUS_TAG" = "$NEW_TAG" ]] && echo "true" || echo "false") 21 export SKIP_RELEASE 22 23 # https://github.com/fsaintjacques/semver-tool/blob/master/src/semver#L5-L14 24 NAT='0|[1-9][0-9]*' 25 ALPHANUM='[0-9]*[A-Za-z-][0-9A-Za-z-]*' 26 IDENT="$NAT|$ALPHANUM" 27 FIELD='[0-9A-Za-z-]+' 28 SEMVER_REGEX="\ 29 ^[vV]?\ 30 ($NAT)\\.($NAT)\\.($NAT)\ 31 (\\-(${IDENT})(\\.(${IDENT}))*)?\ 32 (\\+${FIELD}(\\.${FIELD})*)?$" 33 34 # Used in downstream steps to determine if the release should be marked as a "prerelease" and if the build should build candidate release artifacts 35 IS_CANDIDATE=$([[ $NEW_TAG =~ $SEMVER_REGEX && -n ${BASH_REMATCH[4]} ]] && echo "true" || echo "false") 36 export IS_CANDIDATE 37 38 # This is the version string we will pass to the build, trim off leading 'v' if present 39 RELEASE_VERSION=$([[ $NEW_TAG =~ $SEMVER_REGEX ]] && echo "${NEW_TAG:1}" || echo "${NEW_TAG}") 40 export RELEASE_VERSION 41 echo "RELEASE_VERSION=$RELEASE_VERSION"