2019-05-16 13:41:32 -04:00
|
|
|
#!/bin/bash
|
|
|
|
|
2021-10-01 12:47:10 -04:00
|
|
|
set -e
|
|
|
|
|
2023-01-08 09:37:11 -05:00
|
|
|
if [[ "${SHOULD_BUILD}" != "yes" && "${FORCE_UPDATE}" != "true" ]]; then
|
2019-05-16 13:41:32 -04:00
|
|
|
echo "Will not update version JSON because we did not build"
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
2021-10-01 12:47:10 -04:00
|
|
|
if [[ -z "${GITHUB_TOKEN}" ]]; then
|
|
|
|
echo "Will not update version JSON because no GITHUB_TOKEN defined"
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
2023-01-08 10:08:05 -05:00
|
|
|
if [[ "${FORCE_UPDATE}" == "true" ]]; then
|
|
|
|
. version.sh
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -z "${BUILD_SOURCEVERSION}" ]]; then
|
|
|
|
echo "Will not update version JSON because no BUILD_SOURCEVERSION defined"
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
2023-06-08 18:16:20 -04:00
|
|
|
if [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
|
|
|
|
echo "Skip ppc64le since only reh is published"
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
2019-05-16 13:41:32 -04:00
|
|
|
# {
|
|
|
|
# "url": "https://az764295.vo.msecnd.net/stable/51b0b28134d51361cf996d2f0a1c698247aeabd8/VSCode-darwin-stable.zip",
|
|
|
|
# "name": "1.33.1",
|
|
|
|
# "version": "51b0b28134d51361cf996d2f0a1c698247aeabd8",
|
|
|
|
# "productVersion": "1.33.1",
|
|
|
|
# "hash": "cb4109f196d23b9d1e8646ce43145c5bb62f55a8",
|
|
|
|
# "timestamp": 1554971059007,
|
|
|
|
# "sha256hash": "ac2a1c8772501732cd5ff539a04bb4dc566b58b8528609d2b34bbf970d08cf01"
|
|
|
|
# }
|
|
|
|
|
|
|
|
# `url` is URL_BASE + filename of asset e.g.
|
2022-10-06 16:15:41 -04:00
|
|
|
# darwin: https://github.com/${ASSETS_REPOSITORY}/releases/download/${RELEASE_VERSION}/${APP_NAME}-darwin-${RELEASE_VERSION}.zip
|
2022-08-16 07:51:45 -04:00
|
|
|
# `name` is $RELEASE_VERSION
|
|
|
|
# `version` is $BUILD_SOURCEVERSION
|
|
|
|
# `productVersion` is $RELEASE_VERSION
|
2019-05-16 13:41:32 -04:00
|
|
|
# `hash` in <filename>.sha1
|
|
|
|
# `timestamp` is $(node -e 'console.log(Date.now())')
|
|
|
|
# `sha256hash` in <filename>.sha256
|
|
|
|
|
2023-04-02 09:55:31 -04:00
|
|
|
REPOSITORY_NAME="${VERSIONS_REPOSITORY/*\//}"
|
2022-10-06 16:15:41 -04:00
|
|
|
URL_BASE="https://github.com/${ASSETS_REPOSITORY}/releases/download/${RELEASE_VERSION}"
|
2019-05-17 22:47:03 -04:00
|
|
|
|
|
|
|
generateJson() {
|
2021-10-01 12:47:10 -04:00
|
|
|
JSON_DATA="{}"
|
2019-05-17 22:47:03 -04:00
|
|
|
|
|
|
|
# generate parts
|
2021-10-01 12:47:10 -04:00
|
|
|
local url="${URL_BASE}/${ASSET_NAME}"
|
2022-08-16 07:51:45 -04:00
|
|
|
local name="${RELEASE_VERSION}"
|
|
|
|
local version="${BUILD_SOURCEVERSION}"
|
|
|
|
local productVersion="${RELEASE_VERSION}"
|
2019-05-17 22:47:03 -04:00
|
|
|
local timestamp=$(node -e 'console.log(Date.now())')
|
|
|
|
|
2022-10-06 16:15:41 -04:00
|
|
|
if [[ ! -f "assets/${ASSET_NAME}" ]]; then
|
|
|
|
echo "Downloading asset '${ASSET_NAME}'"
|
|
|
|
gh release download --repo "${ASSETS_REPOSITORY}" "${RELEASE_VERSION}" --dir "assets" --pattern "${ASSET_NAME}*"
|
2021-10-01 12:47:10 -04:00
|
|
|
fi
|
|
|
|
|
2022-10-06 16:15:41 -04:00
|
|
|
local sha1hash=$(cat "assets/${ASSET_NAME}.sha1" | awk '{ print $1 }')
|
|
|
|
local sha256hash=$(cat "assets/${ASSET_NAME}.sha256" | awk '{ print $1 }')
|
2019-05-17 22:47:03 -04:00
|
|
|
|
|
|
|
# check that nothing is blank (blank indicates something awry with build)
|
|
|
|
for key in url name version productVersion sha1hash timestamp sha256hash; do
|
2021-10-01 12:47:10 -04:00
|
|
|
if [[ -z "${key}" ]]; then
|
|
|
|
echo "Variable '${key}' is empty; exiting..."
|
2019-05-17 22:47:03 -04:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# generate json
|
2021-10-01 12:47:10 -04:00
|
|
|
JSON_DATA=$(jq \
|
2019-05-17 22:47:03 -04:00
|
|
|
--arg url "${url}" \
|
|
|
|
--arg name "${name}" \
|
|
|
|
--arg version "${version}" \
|
|
|
|
--arg productVersion "${productVersion}" \
|
|
|
|
--arg hash "${sha1hash}" \
|
|
|
|
--arg timestamp "${timestamp}" \
|
|
|
|
--arg sha256hash "${sha256hash}" \
|
|
|
|
'. | .url=$url | .name=$name | .version=$version | .productVersion=$productVersion | .hash=$hash | .timestamp=$timestamp | .sha256hash=$sha256hash' \
|
|
|
|
<<<'{}')
|
|
|
|
}
|
|
|
|
|
|
|
|
updateLatestVersion() {
|
2021-10-01 12:47:10 -04:00
|
|
|
echo "Generating ${VERSION_PATH}/latest.json"
|
2019-05-17 22:47:03 -04:00
|
|
|
|
2023-01-08 10:08:05 -05:00
|
|
|
# do not update the same version
|
2022-10-11 15:58:57 -04:00
|
|
|
if [[ -f "versions/${VERSION_PATH}/latest.json" ]]; then
|
|
|
|
CURRENT_VERSION=$( jq -r '.name' "versions/${VERSION_PATH}/latest.json" )
|
2021-10-01 12:47:10 -04:00
|
|
|
|
2023-01-08 09:33:27 -05:00
|
|
|
if [[ "${CURRENT_VERSION}" == "${RELEASE_VERSION}" && "${FORCE_UPDATE}" != "true" ]]; then
|
2022-10-11 15:58:57 -04:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
fi
|
2019-05-17 22:47:03 -04:00
|
|
|
|
2022-10-11 15:58:57 -04:00
|
|
|
mkdir -p "versions/${VERSION_PATH}"
|
|
|
|
|
|
|
|
generateJson
|
2019-05-17 22:47:03 -04:00
|
|
|
|
2022-10-11 15:58:57 -04:00
|
|
|
echo "${JSON_DATA}" > "versions/${VERSION_PATH}/latest.json"
|
2019-05-17 22:47:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# init versions repo for later commiting + pushing the json file to it
|
|
|
|
# thank you https://www.vinaygopinath.me/blog/tech/commit-to-master-branch-on-github-using-travis-ci/
|
2022-10-06 16:15:41 -04:00
|
|
|
git clone "https://github.com/${VERSIONS_REPOSITORY}.git"
|
2023-04-02 09:55:31 -04:00
|
|
|
cd "${REPOSITORY_NAME}" || { echo "'${REPOSITORY_NAME}' dir not found"; exit 1; }
|
2022-10-06 16:15:41 -04:00
|
|
|
git config user.email "$( echo "${GITHUB_USERNAME}" | awk '{print tolower($0)}' )-ci@not-real.com"
|
|
|
|
git config user.name "${GITHUB_USERNAME} CI"
|
2019-05-17 22:47:03 -04:00
|
|
|
git remote rm origin
|
2022-10-06 16:15:41 -04:00
|
|
|
git remote add origin "https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/${VERSIONS_REPOSITORY}.git" > /dev/null 2>&1
|
2019-05-17 22:47:03 -04:00
|
|
|
cd ..
|
|
|
|
|
2021-10-01 12:47:10 -04:00
|
|
|
if [[ "${OS_NAME}" == "osx" ]]; then
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}-darwin-${VSCODE_ARCH}-${RELEASE_VERSION}.zip"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/darwin/${VSCODE_ARCH}"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
|
|
|
elif [[ "${OS_NAME}" == "windows" ]]; then
|
2019-07-09 18:25:17 -04:00
|
|
|
# system installer
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}Setup-${VSCODE_ARCH}-${RELEASE_VERSION}.exe"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/system"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
2019-05-17 22:47:03 -04:00
|
|
|
|
|
|
|
# user installer
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}UserSetup-${VSCODE_ARCH}-${RELEASE_VERSION}.exe"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/user"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
2019-05-17 22:47:03 -04:00
|
|
|
|
|
|
|
# windows archive
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}-win32-${VSCODE_ARCH}-${RELEASE_VERSION}.zip"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/archive"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
|
|
|
|
2021-09-08 19:38:07 -04:00
|
|
|
if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then
|
|
|
|
# msi
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}-${VSCODE_ARCH}-${RELEASE_VERSION}.msi"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/msi"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
|
|
|
|
2021-09-08 19:38:07 -04:00
|
|
|
# updates-disabled msi
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}-${VSCODE_ARCH}-updates-disabled-${RELEASE_VERSION}.msi"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/msi-updates-disabled"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
2021-09-08 19:38:07 -04:00
|
|
|
fi
|
2019-05-16 13:41:32 -04:00
|
|
|
else # linux
|
|
|
|
# update service links to tar.gz file
|
|
|
|
# see https://update.code.visualstudio.com/api/update/linux-x64/stable/VERSION
|
|
|
|
# as examples
|
2022-10-06 16:15:41 -04:00
|
|
|
ASSET_NAME="${APP_NAME}-linux-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz"
|
2022-08-29 09:13:25 -04:00
|
|
|
VERSION_PATH="${VSCODE_QUALITY}/linux/${VSCODE_ARCH}"
|
2021-10-01 12:47:10 -04:00
|
|
|
updateLatestVersion
|
2019-05-16 13:41:32 -04:00
|
|
|
fi
|
|
|
|
|
2023-04-02 09:55:31 -04:00
|
|
|
cd "${REPOSITORY_NAME}" || { echo "'${REPOSITORY_NAME}' dir not found"; exit 1; }
|
2019-05-17 22:47:03 -04:00
|
|
|
|
2019-05-20 12:27:22 -04:00
|
|
|
git pull origin master # in case another build just pushed
|
2019-05-17 22:47:03 -04:00
|
|
|
git add .
|
2021-10-01 12:47:10 -04:00
|
|
|
|
|
|
|
CHANGES=$( git status --porcelain )
|
|
|
|
|
|
|
|
if [[ ! -z "${CHANGES}" ]]; then
|
|
|
|
dateAndMonth=$( date "+%D %T" )
|
|
|
|
git commit -m "CI update: ${dateAndMonth} (Build ${GITHUB_RUN_NUMBER})"
|
|
|
|
if ! git push origin master --quiet; then
|
|
|
|
git pull origin master
|
|
|
|
git push origin master --quiet
|
|
|
|
fi
|
2019-06-11 00:35:15 -04:00
|
|
|
fi
|
2019-05-17 22:47:03 -04:00
|
|
|
|
|
|
|
cd ..
|