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."