| #!/bin/bash | |
| # Updates the pinned version of lucicfg to the latest available. | |
| # | |
| # Usage: $ update_lucicfg.sh | |
| set -o errexit | |
| set -o pipefail | |
| function main { | |
| cd "$(dirname "${BASH_SOURCE[0]}")/.." | |
| # Look at the latest version of lucicfg, pull all the git revisions, pick the | |
| # one that comes last alphabetically (to minimize churn since many revisions | |
| # might refer to the same package), and write that to the lucicfg_version | |
| # file. | |
| new_version=$( | |
| cipd describe "infra/tools/luci/lucicfg/\${platform}" -version latest | | |
| grep git_revision | | |
| sort | | |
| tail -n1) | |
| new_version="${new_version// /}" # Trim whitespace. | |
| ensure_file="$(pwd)/cipd.ensure" | |
| # Update pinned version in the ensure file. Assumes that the ensure file is | |
| # valid and holds only a single pinned package. | |
| in_place_sed "s/git_revision:.\{40\}/$new_version/" "$ensure_file" | |
| # Install the new version of lucicfg so we can run `lucicfg version` to get | |
| # the lucicfg tool's semantic version and update the minimum version set by | |
| # `lucicfg.check_version()` in the Starlark code. | |
| lucicfg=$(./scripts/ensure_lucicfg.sh) | |
| semver=$( | |
| "$lucicfg" version | | |
| head -n1 | | |
| sed "s/lucicfg v//" | |
| ) | |
| version_file="$(pwd)/config/main.star" | |
| in_place_sed "s/LUCICFG_VERSION = \".*\"/LUCICFG_VERSION = \"$semver\"/" "$version_file" | |
| } | |
| function in_place_sed { | |
| local directive="$1" | |
| local file="$2" | |
| # Unfortunately, it's impossible to do an in-place sed that works on both Mac | |
| # and Linux without creating a backup file. | |
| sed -i.bak "$directive" "$file" | |
| rm "$file.bak" | |
| } | |
| main "$@" |