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()