Add release state verification functionality to release script
Change-Id: Ib0e09300d179b689ea15ec69a9c7707bfd8df765
Reviewed-on: https://cos-review.googlesource.com/c/cos/tools/+/21874
Cloud-Build: GCB Service account <228075978874@cloudbuild.gserviceaccount.com>
Reviewed-by: Robert Kolchmeyer <rkolchmeyer@google.com>
Tested-by: Arnav Kansal <rnv@google.com>
diff --git a/release/README.md b/release/README.md
new file mode 100644
index 0000000..1d9b0e9
--- /dev/null
+++ b/release/README.md
@@ -0,0 +1,22 @@
+# Release process
+
+## Validating release config - TODO (rnv) - convert to presubmit cloud build
+task
+
+After making changes to the release
+[state](https://cos.googlesource.com/cos/tools/+/refs/heads/master/release/release-versions.yaml)
+the validity of the changes can be checked by running the following command from
+the root of the repo:
+
+`gcloud builds submit --config=presubmit.yaml`
+
+where presubmit.yaml could look like the following:
+
+```
+steps:
+- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:latest'
+ entrypoint: 'bash'
+ args: ['-c',
+ 'pip3 install -r release/requirements.txt && python3 release/release.py --verify'
+ ]
+```
diff --git a/release/release.py b/release/release.py
index 06b76c8..e3ed004 100644
--- a/release/release.py
+++ b/release/release.py
@@ -27,29 +27,32 @@
for release_tag in release_tags:
subprocess.run(["gcloud", "container", "images", "add-tag", src_path + ":" + build_tag, dst_path + ":" + release_tag, "-q"])
-def release(src_bucket, dst_bucket):
+def verify_and_release(src_bucket, dst_bucket, release):
with open('release/release-versions.yaml', 'r') as file:
try:
release_config = yaml.safe_load(file)
validate_config(release_config)
- for release_container in release_config:
- container_name = release_container["container_name"]
- build_tag = release_container["build_commit"]
- release_tags = release_container["release_tags"]
- copy_container_image(src_bucket, dst_bucket, container_name, build_tag, release_tags)
+ if release:
+ for release_container in release_config:
+ container_name = release_container["container_name"]
+ build_tag = release_container["build_commit"]
+ release_tags = release_container["release_tags"]
+ copy_container_image(src_bucket, dst_bucket, container_name, build_tag, release_tags)
except yaml.YAMLError as ex:
raise Exception("Invalid YAML config: %s" % str(ex))
def main():
- if len(sys.argv) != 3:
+ if len(sys.argv) == 2 and sys.argv[1] == "--verify":
+ verify_and_release("", "", False)
+ elif len(sys.argv) == 3:
+ src_bucket = sys.argv[1]
+ dst_bucket = sys.argv[2]
+
+ verify_and_release(src_bucket, dst_bucket, True)
+ else:
sys.exit("sample use: ./release_script <source_gcr_path> <destination_gcr_path>")
- src_bucket = sys.argv[1]
- dst_bucket = sys.argv[2]
-
- release(src_bucket, dst_bucket)
-
if __name__ == '__main__':
main()