update-osconfig-script: Added a temporary util to upgrade osconfig
Added a temporary util that allows us to upgrade osconfig with one
command. This is something similar to what I have as part of my
personal set of tools. I figured since osconfig is so arduous, it
might be better to have this so that maintainers can do all the steps
in one fell swoop.
BUG=b/276500149
TEST=presubmit
RELEASE_NOTE=None
cos-patch: bug
Change-Id: Ic847d72a39df5683e6dba85737920384b228ebbf
Reviewed-on: https://cos-review.googlesource.com/c/third_party/platform/crosutils/+/49569
Tested-by: Nobel Barakat <nobelbarakat@google.com>
Reviewed-by: Robert Kolchmeyer <rkolchmeyer@google.com>
Reviewed-on: https://cos-review.googlesource.com/c/cos/scripts/+/59757
Tested-by: Oleksandr Tymoshenko <ovt@google.com>
Reviewed-by: Oleksandr Tymoshenko <ovt@google.com>
diff --git a/upgrade-osconfig-script.sh b/upgrade-osconfig-script.sh
new file mode 100755
index 0000000..645bcb7
--- /dev/null
+++ b/upgrade-osconfig-script.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This script is intended to be run in the SDK
+
+# This script stitches together all the procedures necessary to upgrade osconfig.
+# Upgrading osconfig (along with a few other golang packages) involves a few long
+# running procedures so having a script like this should help with some of the toil
+# until we find a better long term solution.
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+VERSION=$1
+NEW_EBUILD="google-osconfig-agent-$VERSION"
+
+if [[ -z $VERSION ]]; then
+ echo "You need to pass a version to this script"
+ echo "Example: ./upgrade-osconfig-script.sh 20230504.00"
+ exit 1
+fi
+
+cd /mnt/host/source/src/overlays/project-lakitu/app-admin/google-osconfig-agent/ || exit 1
+
+# Get the latest ebuild
+LATEST_OSCONFIG_EBUILD=$(find . -name "*.ebuild" -type f | sort -r | head -n 1)
+
+# Remove symlinks
+find . -type l -name "*ebuild" -exec rm {} \;
+
+# Rename latest ebuild to desired version
+mv "$LATEST_OSCONFIG_EBUILD" "temp"
+
+# Remove all ebuild files
+find . -name "*.ebuild" -type f -exec rm {} \;
+
+mv "temp" "$NEW_EBUILD.ebuild"
+
+# Create symlink revision file
+ln -s "$NEW_EBUILD.ebuild" "$NEW_EBUILD-r1.ebuild"
+
+# Get modules
+curl "https://raw.githubusercontent.com/GoogleCloudPlatform/osconfig/$VERSION/go.sum" -o _GO.SUM
+cut -d' ' -f-2 _GO.SUM | awk '{print "\t\""$0"\""}' > _EGO_SUM
+
+# Insert modules into EGO_SUM list
+# Delete existing EGO_SUM
+sed -i '/EGO_SUM=/,/)/{//!d}' "$NEW_EBUILD.ebuild"
+# Insert new EGO_SUM
+while read i; do
+ sed -i -e '/EGO_SUM=/a\' -e " $i" "$NEW_EBUILD.ebuild"
+done <_EGO_SUM
+
+# Prepare upload to GCS BUCKET
+git diff | grep "^+" | grep -v "^+++" > _NEWMODS
+sed 's/"//g' -i _NEWMODS # Removes quotation marks.
+
+# Generates the modules’ URIs relative to the Go proxy server URI.
+awk '{print $2"/@v/"$3".zip"}' _NEWMODS | sed 's/\/go.mod.zip$/.mod/g' > _MOD_REL_URIS
+mkdir _DOWNLOADS
+
+# Creates a script file _DOWNLOAD.sh, that downloads the module files from the Go proxy server into _DOWNLOADS directory.
+cat _MOD_REL_URIS | while read line; do echo curl https://proxy.golang.org/$line -o _DOWNLOADS/`echo $line | sed 's/\//%2F/g'` ; done > _DOWNLOAD.sh
+sh _DOWNLOAD.sh
+pushd _DOWNLOADS
+# Uploads the modules files into Chrome OS local mirror.
+for f in *; do
+ gsutil ls "gs://chromeos-mirror/gentoo/distfiles/${f}" || gsutil ls "gs://chromeos-localmirror/distfiles/${f}" || gsutil cp -n -a public-read "${f}" gs://chromeos-localmirror/distfiles/ ;
+done
+popd
+
+wget https://github.com/GoogleCloudPlatform/osconfig/archive/$VERSION.tar.gz
+gsutil cp -n -a public-read $VERSION.tar.gz gs://chromeos-localmirror/distfiles/google-osconfig-agent-$VERSION.tar.gz
+rm -Rf _GO.SUM _EGO_SUM _NEWMODS _MOD_REL_URIS _DOWNLOAD.sh _DOWNLOADS $VERSION.tar.gz
+
+# Generate manifest
+ebuild-lakitu $(equery-lakitu w app-admin/google-osconfig-agent) manifest
+
+cat <<EOF > /tmp/cmsg
+app-admin/google-osconfig-agent: Update google-osconfig-agent to $VERSION
+
+BUG=b/TODO
+TEST=presubmit
+RELEASE_NOTE=Updated app-admin/google-osconfig-agent to $VERSION.
+
+cos-patch: lts-refresh
+EOF
+
+git add .
+git commit -F /tmp/cmsg
+rm /tmp/cmsg
+
+echo "Commit created with message"
+git --no-pager show -s --format=%B HEAD
+echo "Update the bug in the commit message and push it to complete the upgrade."