diff --git a/.ci/bump-golang.yml b/.ci/bump-golang.yml new file mode 100644 index 00000000000..470c6f4c8d5 --- /dev/null +++ b/.ci/bump-golang.yml @@ -0,0 +1,134 @@ +--- +name: Bump golang-version to latest version + +scms: + githubConfig: + kind: github + spec: + user: '{{ requiredEnv "GIT_USER" }}' + email: '{{ requiredEnv "GIT_EMAIL" }}' + owner: elastic + repository: elastic-agent + token: '{{ requiredEnv "GITHUB_TOKEN" }}' + username: '{{ requiredEnv "GIT_USER" }}' + branch: main + +actions: + elastic-agent: + kind: github/pullrequest + scmid: githubConfig + sourceid: latestGoVersion + spec: + automerge: false + labels: + - dependencies + - backport-skip + title: '[Automation] Bump Golang version to {{ source "latestGoVersion" }}' + description: | + It requires the version to be bumped first in golang-crossbuild project, then a new release will be added to: + https://github.com/elastic/golang-crossbuild/releases/tag/v{{ source "latestGoVersion" }}. + Otherwise it will fail until the docker images are available. + +sources: + minor: + name: Get minor version in .go-version + kind: shell + transformers: + - findsubmatch: + pattern: '^\d+.(\d+).\d+$' + captureindex: 1 + spec: + command: cat .go-version + + latestGoVersion: + name: Get Latest Go Release + kind: githubrelease + dependson: + - minor + transformers: + - trimprefix: go + spec: + owner: golang + repository: go + token: '{{ requiredEnv "GITHUB_TOKEN" }}' + username: '{{ requiredEnv "GIT_USER" }}' + versionfilter: + kind: regex + pattern: go1\.{{ source "minor" }}\.(\d*)$ + + gomod: + dependson: + - latestGoVersion + name: Get version in go.mod format + kind: shell + transformers: + - findsubmatch: + pattern: '^(\d+.\d+).\d+' + captureindex: 1 + spec: + command: echo {{ source "latestGoVersion" }} + +conditions: + dockerTag: + name: Is docker image golang:{{ source "latestGoVersion" }} published + kind: dockerimage + spec: + image: golang + tag: '{{ source "latestGoVersion" }}' + sourceid: latestGoVersion + + goDefaultVersion-check: + name: Check if defined golang version differs + kind: shell + sourceid: latestGoVersion + spec: + command: 'grep -v -q {{ source "latestGoVersion" }} .go-version #' + +targets: + update-go-version: + name: "Update .go-version" + sourceid: latestGoVersion + scmid: githubConfig + kind: file + spec: + content: '{{ source "latestGoVersion" }}' + file: .go-version + matchpattern: '\d+.\d+.\d+' + update-golang.ci: + name: "Update .golangci.yml" + sourceid: latestGoVersion + scmid: githubConfig + kind: file + spec: + content: '{{ source "latestGoVersion" }}' + file: .golangci.yml + matchpattern: '\d+.\d+.\d+' + update-version.asciidoc: + name: "Update version.asciidoc" + sourceid: latestGoVersion + scmid: githubConfig + kind: file + spec: + content: ':go-version: {{ source "latestGoVersion" }}' + file: version/docs/version.asciidoc + matchpattern: ':go-version: \d+.\d+.\d+' + update-dockerfiles: + name: "Update from dockerfiles" + sourceid: latestGoVersion + scmid: githubConfig + kind: file + spec: + content: 'ARG GO_VERSION={{ source "latestGoVersion" }}' + files: + - Dockerfile + - Dockerfile.skaffold + matchpattern: 'ARG GO_VERSION=\d+.\d+.\d+' + update-gomod: + name: "Update go.mod" + sourceid: gomod + scmid: githubConfig + kind: file + spec: + content: 'go {{ source "gomod" }}' + file: go.mod + matchpattern: 'go \d+.\d+' diff --git a/.ci/scripts/install-go.bat b/.ci/scripts/install-go.bat new file mode 100755 index 00000000000..29448bd4f63 --- /dev/null +++ b/.ci/scripts/install-go.bat @@ -0,0 +1,57 @@ +set GOPATH=%WORKSPACE% +set MAGEFILE_CACHE=%WORKSPACE%\.magefile + +set PATH=%WORKSPACE%\bin;C:\ProgramData\chocolatey\bin;%PATH% + +curl --version >nul 2>&1 && ( + echo found curl +) || ( + choco install curl -y --no-progress --skipdownloadcache +) + +mkdir %WORKSPACE%\bin + +IF EXIST "%PROGRAMFILES(X86)%" ( + REM Force the gvm installation. + SET GVM_BIN=gvm.exe + curl -L -o %WORKSPACE%\bin\gvm.exe https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-windows-amd64.exe + IF ERRORLEVEL 1 ( + REM gvm installation has failed. + del bin\gvm.exe /s /f /q + exit /b 1 + ) +) ELSE ( + REM Windows 7 workers got a broken gvm installation. + curl -L -o %WORKSPACE%\bin\gvm.exe https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-windows-386.exe + IF ERRORLEVEL 1 ( + REM gvm installation has failed. + del bin\gvm.exe /s /f /q + exit /b 1 + ) +) + +SET GVM_BIN=gvm.exe +WHERE /q %GVM_BIN% +%GVM_BIN% version + +REM Install the given go version +%GVM_BIN% --debug install %GO_VERSION% + +REM Configure the given go version +FOR /f "tokens=*" %%i IN ('"%GVM_BIN%" use %GO_VERSION% --format=batch') DO %%i + +go env +IF ERRORLEVEL 1 ( + REM go is not configured correctly. + rmdir %WORKSPACE%\.gvm /s /q + exit /b 1 +) + +where mage +mage -version +IF ERRORLEVEL 1 ( + go get github.com/magefile/mage + IF ERRORLEVEL 1 ( + exit /b 1 + ) +) diff --git a/.ci/scripts/install-go.sh b/.ci/scripts/install-go.sh new file mode 100755 index 00000000000..31566c08726 --- /dev/null +++ b/.ci/scripts/install-go.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -exuo pipefail + +MSG="environment variable missing" +GO_VERSION=${GO_VERSION:?$MSG} +PROPERTIES_FILE=${PROPERTIES_FILE:-"go_env.properties"} +HOME=${HOME:?$MSG} +OS=$(uname -s| tr '[:upper:]' '[:lower:]') +ARCH=$(uname -m| tr '[:upper:]' '[:lower:]') +GVM_CMD="${HOME}/bin/gvm" + +if command -v go +then + set +e + echo "Found Go. Checking version.." + FOUND_GO_VERSION=$(go version|awk '{print $3}'|sed s/go//) + if [ "$FOUND_GO_VERSION" == "$GO_VERSION" ] + then + echo "Versions match. No need to install Go. Exiting." + exit 0 + fi + set -e +fi + +if [ "${ARCH}" == "aarch64" ] ; then + GVM_ARCH_SUFFIX=arm64 +elif [ "${ARCH}" == "x86_64" ] ; then + GVM_ARCH_SUFFIX=amd64 +elif [ "${ARCH}" == "i686" ] ; then + GVM_ARCH_SUFFIX=386 +else + GVM_ARCH_SUFFIX=arm +fi + +echo "UNMET DEP: Installing Go" +mkdir -p "${HOME}/bin" + +curl -sSLo "${GVM_CMD}" "https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-${OS}-${GVM_ARCH_SUFFIX}" +chmod +x "${GVM_CMD}" + +${GVM_CMD} "${GO_VERSION}" |cut -d ' ' -f 2|tr -d '\"' > ${PROPERTIES_FILE} + +eval "$("${GVM_CMD}" "${GO_VERSION}")"