Skip to content

Commit

Permalink
Automate Minor release - Feature Freeze
Browse files Browse the repository at this point in the history
with GitHub workflow files.

We run these steps for a new minor version - feature freeze :
- create the Bump-version PR on `main`, 
- create the new minor-version-branch , e.g. `2.18.x`
- create the Release PR on minor-version-branch

We no more use a fork, but a branch directly.
  • Loading branch information
pallavisontakke authored Feb 3, 2025
1 parent 39049fe commit c01ad17
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 18 deletions.
82 changes: 82 additions & 0 deletions .github/workflows/minor_release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Minor Release - Feature Freeze
on:
workflow_dispatch:

# The workflow needs the permission to push branches
permissions:
contents: write

jobs:
minor-release-feature-freeze:
name: Minor Release - Feature Freeze
runs-on: ubuntu-latest

steps:
- name: Install Linux Dependencies
run: |
sudo apt-get update
sudo apt-get install pip
- name: Install Python Dependencies
run: |
pip install PyGithub requests
- name: Checkout TimescaleDB
uses: actions/checkout@v4

- name: Set env var NEW_VERSION
run: echo "NEW_VERSION=$(head -1 version.config | cut -d ' ' -f 3 | cut -d '-' -f 1)" >> $GITHUB_ENV
- name: Test env var NEW_VERSION
run: echo $NEW_VERSION

- name: Set env var RELEASE_BRANCH
run: echo "RELEASE_BRANCH="${${{ env.NEW_VERSION }}/%.0/.x}"" >> $GITHUB_ENV
- name: Test env var RELEASE_BRANCH
run: echo $RELEASE_BRANCH

- name: Set env var CURRENT_MINOR_VERSION
run: echo "CURRENT_MINOR_VERSION="$(echo ${{ env.NEW_VERSION }} | cut -d '.' -f 2)"" >> $GITHUB_ENV
- name: Test env var CURRENT_MINOR_VERSION
run: echo $CURRENT_MINOR_VERSION

- name: Set env var NEW_MINOR_VERSION
run: echo "NEW_MINOR_VERSION="$((${{ env.CURRENT_MINOR_VERSION }} + 1))"" >> $GITHUB_ENV
- name: Test env var NEW_MINOR_VERSION
run: echo $NEW_MINOR_VERSION

- name: Set env var NEW_MINOR_VERSION_FULL
run: echo "NEW_MINOR_VERSION_FULL="$(echo ${{ env.NEW_VERSION }} | sed -e "s/${{ env.CURRENT_MINOR_VERSION }}/${{ env.NEW_MINOR_VERSION }}/g")"" >> $GITHUB_ENV
- name: Test env var NEW_MINOR_VERSION_FULL
run: echo $NEW_MINOR_VERSION_FULL

- name: Create PR to bump version in the main branch
env:
GITHUB_TOKEN: ${{ secrets.ORG_AUTOMATION_TOKEN }}
run: |
git remote --verbose
git checkout -b release/bump-version-in-main-to-${{ env.NEW_MINOR_VERSION_FULL }}-dev origin/main
sed -i.bak "s/${{ env.CURRENT_MINOR_VERSION }}/${{ env.NEW_MINOR_VERSION }}/g" version.config
rm version.config.bak
git commit --no-verify -a -m "Bump version to ${{ env.NEW_MINOR_VERSION_FULL }}-dev"
git push origin release/bump-version-in-main-to-${{ env.NEW_MINOR_VERSION_FULL }}-dev
- name: Checkout TimescaleDB
uses: actions/checkout@v4

- name: Create release branch for minor release
env:
GITHUB_TOKEN: ${{ secrets.ORG_AUTOMATION_TOKEN }}
run: |
git remote --verbose
git checkout -b ${{ env.RELEASE_BRANCH }} origin/main
git push origin ${{ env.RELEASE_BRANCH }}:${{ env.RELEASE_BRANCH }}
- name: Checkout TimescaleDB
uses: actions/checkout@v4

- name: Create PR to release branch for minor release
env:
GITHUB_TOKEN: ${{ secrets.ORG_AUTOMATION_TOKEN }}
run: |
git remote --verbose
scripts/release/create_minor_release_PR_commit.sh ${{ env.RELEASE_BRANCH }}
28 changes: 16 additions & 12 deletions scripts/release/create_minor_release_PR_commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
set -eu

# Folder, where we have cloned repositories' sources
SOURCES_DIR="sources"
SOURCES_DIR="timescaledb"

GH_USERNAME=$(gh auth status | grep 'Logged in to' |cut -d ' ' -f 9)

FORK_DIR="$GH_USERNAME-timescaledb"
#folder-name
FORK_DIR="timescaledb"

echo "---- Deriving the release related versions from main ----"

Expand All @@ -17,6 +16,7 @@ NEW_PATCH_VERSION="0"
NEW_VERSION=$(head -1 version.config | cut -d ' ' -f 3 | cut -d '-' -f 1)
RELEASE_BRANCH="${NEW_VERSION/%.$NEW_PATCH_VERSION/.x}"
CURRENT_VERSION=$(tail -1 version.config | cut -d ' ' -f 3)

cd sql/updates

for f in ./*
Expand All @@ -29,26 +29,28 @@ done
LAST_VERSION=$(echo "$LAST_UPDATE_FILE" |cut -d '-' -f 1 |cut -d '/' -f 2)

echo "CURRENT_VERSION is $CURRENT_VERSION"
#echo "LAST_UPDATE_FILE is $LAST_UPDATE_FILE"
echo "LAST_VERSION is $LAST_VERSION"
echo "RELEASE_BRANCH is $RELEASE_BRANCH"
echo "NEW_VERSION is $NEW_VERSION"
cd ~/"$SOURCES_DIR"/"$FORK_DIR"


# Derived Variables
#RELEASE_PR_BRANCH="release-$NEW_VERSION-$RELEASE_BRANCH"
RELEASE_PR_BRANCH="release-$NEW_VERSION"
RELEASE_PR_BRANCH="release/$NEW_VERSION"
UPDATE_FILE="$CURRENT_VERSION--$NEW_VERSION.sql"
DOWNGRADE_FILE="$NEW_VERSION--$CURRENT_VERSION.sql"
LAST_UPDATE_FILE="$LAST_VERSION--$CURRENT_VERSION.sql"
LAST_DOWNGRADE_FILE="$CURRENT_VERSION--$LAST_VERSION.sql"

BASE_BRANCH="$1"
RELEASE_PR_BRANCH="$RELEASE_PR_BRANCH-to-$BASE_BRANCH"

echo "final BASE_BRANCH is $BASE_BRANCH"
echo "RELEASE_PR_BRANCH is $RELEASE_PR_BRANCH"

echo "---- Creating release branch $RELEASE_PR_BRANCH from $RELEASE_BRANCH, on the fork ----"
echo "---- Creating release branch $RELEASE_PR_BRANCH from $BASE_BRANCH, on the fork ----"

git checkout -b "$RELEASE_PR_BRANCH" upstream/"$RELEASE_BRANCH"
#git checkout -b "$RELEASE_PR_BRANCH" upstream/main
git checkout -b "$RELEASE_PR_BRANCH" origin/"$BASE_BRANCH"
git branch
git pull && git diff HEAD

Expand Down Expand Up @@ -92,11 +94,13 @@ sed -i.bak "s/FILE reverse-dev.sql)/FILE ${DOWNGRADE_FILE})/g" CMakeLists.txt
rm CMakeLists.txt.bak



cd ~/"$SOURCES_DIR"/"$FORK_DIR"

echo "---- Creating CHANGELOG_$NEW_VERSION.md file ----"

rm -f ~/CHANGELOG_"$NEW_VERSION".md

cd ~/"$SOURCES_DIR"/"$FORK_DIR"
./scripts/merge_changelogs.sh > ~/CHANGELOG_"$NEW_VERSION".md

echo "---- Editing the CHANGELOG.md file with the contents of CHANGELOG_$NEW_VERSION.md file. ----"
Expand Down Expand Up @@ -129,13 +133,13 @@ done

cd ..


git diff HEAD --name-only


echo "---- Committing the Release PR to fork ----"

#Remove date from the intermediate CHANGELOG file.

cut -d '(' -f1 < ~/CHANGELOG_"$NEW_VERSION".md > ~/CHANGELOG_"$NEW_VERSION".md.tmp
mv ~/CHANGELOG_"$NEW_VERSION".md.tmp ~/CHANGELOG_"$NEW_VERSION".md

Expand Down
10 changes: 4 additions & 6 deletions scripts/release/create_minor_release_branch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@
set -eu

# Folder, where we have cloned repositories' sources
SOURCES_DIR="sources"
SOURCES_DIR="timescaledb"

GH_USERNAME=$(gh auth status | grep 'Logged in to' |cut -d ' ' -f 9)

FORK_DIR="$GH_USERNAME-timescaledb"
FORK_DIR="timescaledb"

echo "---- Deriving the release related versions from main ----"

Expand All @@ -25,6 +23,6 @@ echo "NEW_VERSION is $NEW_VERSION"
echo "---- Creating the version branch from main ----"

git fetch --all
git checkout -b "$RELEASE_BRANCH" upstream/main
git push upstream "$RELEASE_BRANCH":"$RELEASE_BRANCH"
git checkout -b "$RELEASE_BRANCH" origin/main
git push origin "$RELEASE_BRANCH":"$RELEASE_BRANCH"

0 comments on commit c01ad17

Please sign in to comment.