Skip to content

Commit fdd730a

Browse files
committed
Add GitHub CLI recipies and cleanup
Adding Feedback Signed-off-by: Oliver Kautz <[email protected]>
1 parent 7d5d14a commit fdd730a

File tree

2 files changed

+74
-26
lines changed

2 files changed

+74
-26
lines changed

just.env.example

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
OCI_REGISTRY=
2-
OCI_REPOSITORY=
1+
OCI_REGISTRY=registry.scs.community
2+
OCI_REPOSITORY=registry.scs.community/cluster-stacks/scs
33
OCI_USERNAME=
44
OCI_PASSWORD=
5+
# or
56
OCI_ACCESS_TOKEN=
7+
GH_TOKEN= # Accesstoken for GitHub Account for authentication for git and PR management

justfile

Lines changed: 70 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ set export := true
77
set dotenv-filename := "just.env"
88
set dotenv-load := true
99

10-
path := env_var('PATH') + ":" + justfile_directory() + "/bin"
10+
PATH := env_var('PATH') + ":" + justfile_directory() + "/bin"
1111
repo := "https://github.com/SovereignCloudStack/cluster-stacks"
1212
mainBranch := "main"
1313
workingBranchPrefix := "chore/update-"
@@ -26,7 +26,7 @@ help: default
2626
dependencies:
2727
#!/usr/bin/env bash
2828
set -euo pipefail
29-
export PATH=${path}
29+
3030
if ! which csctl >/dev/null 2>&1; then
3131
echo -e "\e[33m\e[1mcsctl not found, building it from source.\e[0m"
3232
mkdir -p bin
@@ -92,7 +92,7 @@ diff:
9292

9393

9494
# Build Clusterstacks version directories according to changes in versions.yaml. Builds out directoy
95-
[group('Building Manifests')]
95+
[group('Build Manifests')]
9696
build-versions: dependencies
9797
#!/usr/bin/env bash
9898
set -euo pipefail
@@ -102,7 +102,7 @@ build-versions: dependencies
102102
done
103103

104104
# Generate manifest for all Kubernetes Version regardless of changes to versions.
105-
[group('Building Manifests')]
105+
[group('Build Manifests')]
106106
build-versions-all: dependencies
107107
#!/usr/bin/env bash
108108
set -euo pipefail
@@ -114,12 +114,12 @@ build-versions-all: dependencies
114114
done
115115

116116
# Generate Manifest for a specific Kubernetes version. Builds out directory
117-
[group('Building Manifests')]
117+
[group('Build Manifests')]
118118
build-version VERSION:
119119
#!/usr/bin/env bash
120120
set -euo pipefail
121121
echo -e "\e[33m\e[1mBuild Manifests for {{ VERSION }}\e[0m"
122-
## CHECK IF THERE IS A CHANGE IN THE COMPONENT VERSIONS
122+
# check if there is a change in the component versions
123123
if [[ -e providers/openstack/out/{{ replace(VERSION, ".", "-") }} ]]; then
124124
versionsFile="providers/openstack/scs/versions.yaml"
125125
k8sVersion=$(yq -r ".[] | select(.kubernetes | test(\"{{ replace(VERSION, "-", ".") }}\")).kubernetes" ${versionsFile})
@@ -137,10 +137,9 @@ build-version VERSION:
137137

138138

139139
# Build assets for a certain Kubernetes Version. Out directory needs to be present.
140-
[group('Building Assets')]
140+
[group('Build Assets')]
141141
build-assets-local-for VERSION: dependencies
142142
#!/usr/bin/env bash
143-
export PATH=${path}
144143
set -euo pipefail
145144
just build-version {{ VERSION }}
146145
echo -e "\e[33m\e[1mBuild Assets for {{ VERSION }}\e[0m"
@@ -153,43 +152,45 @@ build-assets-local-for VERSION: dependencies
153152
csctl create -m hash providers/openstack/out/{{ replace(VERSION, ".", "-") }}/
154153

155154
# Build assets for a certain Kubernetes Version. Out directory needs to be present.
156-
[group('Building Assets')]
155+
[group('Build Assets')]
157156
build-assets-local: build-versions
158157
#!/usr/bin/env bash
159-
export PATH=${path}
160158
set -euo pipefail
161159
changedVersions=$(just diff)
162160
for version in ${changedVersions[@]}; do
163161
just build-assets-local-for ${version}
164162
done
165163

166164
# Build assets for a certain Kubernetes Version.
167-
[group('Building Assets')]
165+
[group('Build Assets')]
168166
build-assets-all-local: build-versions-all
169167
#!/usr/bin/env bash
170-
export PATH=${path}
171168
set -euo pipefail
172169
versions="$(cd providers/openstack/out/ && echo *)"
173170
for version in ${versions[@]}; do
174171
just build-assets-local-for ${version}
175172
done
176173

177174
# Publish assets to OCI registry
178-
[group('Building Assets')]
175+
[group('Release')]
179176
publish-assets VERSION:
180177
#!/usr/bin/env bash
181-
export PATH=${path}
182178
if [[ -e providers/openstack/out/{{ replace(VERSION, ".", "-") }} ]]; then
183-
csctl create -m hash --publish --remote oci providers/openstack/out/{{ replace(VERSION, ".", "-") }}/
179+
if [[ -n ${OCI_REGISTRY} && \
180+
-n ${OCI_REPOSITORY} && \
181+
(( -n ${OCI_USERNAME} && -n ${OCI_PASSWORD} ) || -n ${OCI_ACCESS_TOKEN} ) ]]; then
182+
csctl create -m hash --publish --remote oci providers/openstack/out/{{ replace(VERSION, ".", "-") }}/
183+
else
184+
echo "Please define OCI_* Variables in just.env"
185+
fi
184186
else
185187
echo "Manifest directory for {{ replace(VERSION, ".", "-") }}" does not exist.
186188
fi
187189

188-
# Publish alles available assets to OCI registry
189-
[group('Building Assets')]
190+
# Publish all available assets to OCI registry
191+
[group('Release')]
190192
publish-assets-all:
191193
#!/usr/bin/env bash
192-
export PATH=${path}
193194
set -euo pipefail
194195
versions="$(cd providers/openstack/out/ && echo *)"
195196
for version in ${versions[@]}; do
@@ -199,19 +200,25 @@ publish-assets-all:
199200
# Remove old branches that had been merged to main
200201
[group('git')]
201202
git-clean:
202-
git branch --merged | grep -Ev "(^\*|^\+|master|main|dev)" | xargs --no-run-if-empty git branch -d
203+
git branch --merged | grep -Ev "(^\*|^\+|^release/\+|main)" | xargs --no-run-if-empty git branch -d
203204

204-
# Create Chore branch for specific Kubernetes Version
205+
# Create chore branch and PR for specific Kubernetes Version
205206
[group('git')]
206-
git-chore-branch VERSION:
207+
git-chore-branch VERSION: && (gh-create-chore-pr VERSION)
207208
#!/usr/bin/env bash
208209
set -euo pipefail
209210
currentBranch=$(git branch --show-current)
210-
git switch -c chore/update-{{replace(VERSION, "-", ".") }}
211+
if git show-ref -q --branches {{ workingBranchPrefix }}{{replace(VERSION, "-", ".") }}; then
212+
# Switch to branch if it exists
213+
git switch {{ workingBranchPrefix }}{{replace(VERSION, "-", ".") }}
214+
else
215+
# Create branch and switch to it
216+
git switch -c {{ workingBranchPrefix }}{{replace(VERSION, "-", ".") }}
217+
fi
211218
cp -r providers/openstack/out/{{replace(VERSION, ".", "-") }}/* providers/openstack/scs/
212219
git add providers/openstack/scs/
213-
git commit -s -S -m "chore(versions): Update Release for {{replace(VERSION, "-", ".") }}"
214-
#git push
220+
git commit -s -m "chore(versions): Update Release for {{replace(VERSION, "-", ".") }}"
221+
git push --set-upstream origin {{ workingBranchPrefix }}{{replace(VERSION, "-", ".") }}
215222
git switch ${currentBranch}
216223

217224
# Create chore branches for all available out versions
@@ -229,3 +236,42 @@ git-chore-branches-all:
229236
just git-chore-branch $version
230237
done
231238
fi
239+
240+
# Publish new release of providers/openstack/scs
241+
[group('Release')]
242+
[confirm('Are you sure to publish a new stable release? (y|n)')]
243+
publish-release: dependencies
244+
csctl create --publish --remote oci providers/openstack/scs/
245+
246+
# Login to Github with GitHub CLI
247+
[group('GitHub')]
248+
gh-login GH_TOKEN="${GH_TOKEN}":
249+
#!/usr/bin/env bash
250+
set -euo pipefail
251+
if ! which gh >/dev/null 2>&1; then
252+
echo "GitHub CLI not installed."
253+
else
254+
if ! gh auth status >/dev/null 2>&1; then
255+
gh config set -h github.com git_protocol https
256+
# If TOKEN is empty use WebUI Authentication
257+
if [[ -z $GH_TOKEN ]]; then
258+
gh auth login --hostname github.com
259+
else
260+
echo $GH_TOKEN | gh auth login --hostname github.com --with-token
261+
fi
262+
fi
263+
fi
264+
265+
# Create chore PR for given VERSION against correspondend release branch
266+
[group('GitHub')]
267+
gh-create-chore-pr VERSION: gh-login
268+
#!/usr/bin/env bash
269+
set -euo pipefail
270+
if ! which gh >/dev/null 2>&1; then
271+
echo "GitHub CLI not installed."
272+
else
273+
gh pr --title "chore(versions): Update Release for {{replace(VERSION, "-", ".") }}" \
274+
--head {{ workingBranchPrefix }}{{replace(VERSION, "-", ".") }} \
275+
--base {{ targetBranchPrefix }}{{replace(VERSION, "-", ".") }} \
276+
--dry-run
277+
fi

0 commit comments

Comments
 (0)