| #!/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." |