diff --git a/devel/own-projects/update-release-dates.sh b/devel/own-projects/update-release-dates.sh new file mode 100755 index 00000000..38003ef0 --- /dev/null +++ b/devel/own-projects/update-release-dates.sh @@ -0,0 +1,78 @@ +#!/bin/bash +set -e # abort on first error +shopt -s nullglob +source "$(dirname $0)/../versions.sh" + +if ! [[ $GITHUB_TOKEN ]]; then + echo "Don't forget to set \$GITHUB_TOKEN." + exit -2 +fi + +gh_user=Martchus +new_release_date=$(date --iso-8601) +old_release_date_regex='set\(META_RELEASE_DATE "([^\)]*)"\)' + +# read project dirs; split colon separated path +OIFS=$IFS +IFS=':' +for dir in $DEFAULT_PROJECTS_DIR; do + projectsdirs+=("$dir") +done +IFS=$OIFS + +# check whether the project will be released and set the current day as release date then +for project in "${!versions[@]}" +do + version=${versions[$project]} + gh_name=${github_names[$project]:-$project} + [[ $gh_name == 'skip' ]] && continue + [[ $version == 'none' ]] && continue + echo '------------------------------------------------------------------------' + echo "NEXT: $project -> $version" + + # check whether release already exists + if github-release info --user "$gh_user" --repo "$gh_name" --tag "v$version"; then + echo "skipping $project -> v$version; release already present" + continue + fi + + # locate project + project_dir= + for dir in "${projectsdirs[@]}"; do + [[ -d $dir/$project ]] && project_dir=$dir/$project && break + done + if [[ ! $project_dir ]]; then + echo "FAILURE: Unable to locate checkout of $project" + continue + fi + echo "entering '$project_dir'" + cd "$project_dir" + + # check current release date + cmake_lists=$(cat CMakeLists.txt) + if ! [[ $cmake_lists =~ $old_release_date_regex ]]; then + echo "FAILURE: Unable to read current release date from CMakeLists.txt:\n$cmake_lists" + continue + fi + old_release_date=${BASH_REMATCH[1]} + if [[ $old_release_date == "$new_release_date" ]]; then + echo "skipping $project -> release date $old_release_date does not change" + continue + fi + + if ! [ -z "$(git status --porcelain)" ]; then + echo "FAILURE: Git checkout '$PWD' is not clean" + continue + fi + + # promt + read -p "update release date of $project -> v$version [y/n]? " -n 1 -r + echo + [[ $REPLY =~ ^[Yy]$ ]] || continue + + # update release date + sed -i -e "s|set(META_RELEASE_DATE.*|set(META_RELEASE_DATE \"$new_release_date\")|" CMakeLists.txt + git add CMakeLists.txt + git commit -m 'Update release date' + git push +done