From d7fe3923fcdbf91574f411779589037ebd6a822a Mon Sep 17 00:00:00 2001 From: Peter Squicciarini <stripedpajamas273@gmail.com> Date: Fri, 17 May 2019 19:47:03 -0700 Subject: [PATCH] Refactor update_version to support Windows builds --- sum.sh | 8 ++- update_version.sh | 149 +++++++++++++++++++++++++++++++--------------- win32-build.yml | 13 ++-- 3 files changed, 117 insertions(+), 53 deletions(-) diff --git a/sum.sh b/sum.sh index 1367666..d12d048 100755 --- a/sum.sh +++ b/sum.sh @@ -10,6 +10,10 @@ sum_file () { if [[ "$SHOULD_BUILD" == "yes" ]]; then if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sum_file VSCodium-darwin-*.zip + elif [[ "$CI_WINDOWS" == "True" ]]; then + sum_file VSCodiumSetup-*.exe + sum_file VSCodiumUserSetup-*.exe + sum_file VSCodium-win32-*.zip else # linux if [[ "$BUILDARCH" == "x64" ]]; then deb_arch=amd64 @@ -21,7 +25,7 @@ if [[ "$SHOULD_BUILD" == "yes" ]]; then sum_file VSCodium-linux*.tar.gz sum_file vscode/.build/linux/deb/${deb_arch}/deb/*.deb sum_file vscode/.build/linux/rpm/${rpm_arch}/*.rpm - cp vscode/.build/linux/deb/${deb_arch}/deb/*.sha256 . - cp vscode/.build/linux/rpm/${rpm_arch}/*.sha256 . + cp vscode/.build/linux/deb/${deb_arch}/deb/*.{sha256,sha1} . + cp vscode/.build/linux/rpm/${rpm_arch}/*.{sha256,sha1} . fi fi diff --git a/update_version.sh b/update_version.sh index dd5a34d..270b56c 100755 --- a/update_version.sh +++ b/update_version.sh @@ -26,68 +26,123 @@ fi URL_BASE=https://github.com/VSCodium/vscodium/releases/download/${LATEST_MS_TAG} +# to make testing on forks easier +if [[ "$CI_WINDOWS" == "True" ]]; then + # BUILD_REPOSITORY_URI = e.g. https://github.com/VSCodium/vscodium + VERSIONs_REPO=$(echo ${BUILD_REPOSITORY_URI} | awk -F"/" '{ print $4 }')/versions +else + # TRAVIS_REPO_SLUG = e.g. VSCodium/vscodium + VERSIONS_REPO=$(echo ${TRAVIS_REPO_SLUG} | awk -F"/" '{ print $1 }')/versions +fi + +# generateJson <assetName> +# e.g. generateJson VSCodium-darwin-1.33.0.zip +generateJson() { + local assetName=$1 + + # generate parts + local url=${URL_BASE}/${assetName} + local name=$LATEST_MS_TAG + local version=$LATEST_MS_COMMIT + local productVersion=$LATEST_MS_TAG + local timestamp=$(node -e 'console.log(Date.now())') + + local sha1hash=$(cat ${assetName}.sha1 | awk '{ print $1 }') + local sha256hash=$(cat ${assetName}.sha256 | awk '{ print $1 }') + + # check that nothing is blank (blank indicates something awry with build) + for key in url name version productVersion sha1hash timestamp sha256hash; do + if [[ "${!key}" == "" ]]; then + echo "Missing data for version update; exiting..." + exit 1 + fi + done + + # generate json + local json=$(jq \ + --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' \ + <<<'{}') + + echo "$json" +} + +updateLatestVersion() { + cd versions + + local versionPath=$1 + local json=$2 + + # create/update the latest.json file in the correct location + mkdir -p $versionPath + echo $json > $versionPath/latest.json + + cd .. +} + +# 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/ +git clone https://github.com/${VERSIONS_REPO}.git +cd versions +git config user.email "travis@travis-ci.org" +git config user.name "Travis CI" +git remote rm origin +git remote add origin https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/${VERSIONS_REPO}.git > /dev/null 2>&1 +cd .. + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then # zip, sha1, and sha256 files are all at top level dir - ASSET_PATH=. ASSET_NAME=VSCodium-darwin-${LATEST_MS_TAG}.zip VERSION_PATH="darwin" + JSON="$(generateJson ${ASSET_NAME})" + updateLatestVersion "$VERSION_PATH" "$JSON" elif [[ "$CI_WINDOWS" == "True" ]]; then - # TODO: make this logic work for Windows builds too - # or re-implement it in PowerShell and call that from the Windows build - exit + # windows update service supports user and archive types + # so we will run the commands twice + + # user installer + ASSET_NAME=VSCodiumUserSetup-${BUILDARCH}-${LATEST_MS_TAG}.exe + + if [[ "$BUILDARCH" == "x64" ]]; then + VERSION_PATH="win32/${BUILDARCH}/user" + else + VERSION_PATH="win32/user" + fi + JSON="$(generateJson ${ASSET_NAME} ${ASSET_PATH})" + updateLatestVersion "$VERSION_PATH" "$JSON" + + # windows archive + ASSET_NAME=VSCodium-win32-${BUILDARCH}-${LATEST_MS_TAG}.zip + + if [[ "$BUILDARCH" == "x64" ]]; then + VERSION_PATH="win32/${BUILDARCH}/archive" + else + VERSION_PATH="win32/archive" + fi + JSON="$(generateJson ${ASSET_NAME} ${ASSET_PATH})" + updateLatestVersion "$VERSION_PATH" "$JSON" else # linux # update service links to tar.gz file # see https://update.code.visualstudio.com/api/update/linux-x64/stable/VERSION # and https://update.code.visualstudio.com/api/update/linux-ia32/stable/VERSION # as examples - ASSET_PATH=. ASSET_NAME=VSCodium-linux-${BUILDARCH}-${LATEST_MS_TAG}.tar.gz VERSION_PATH="linux/${BUILDARCH}" + JSON="$(generateJson ${ASSET_NAME})" + updateLatestVersion "$VERSION_PATH" "$JSON" fi -# generate parts -url=${URL_BASE}/${ASSET_NAME} -name=$LATEST_MS_TAG -version=$LATEST_MS_COMMIT -productVersion=$LATEST_MS_TAG -sha1hash=$(cat ${ASSET_PATH}/${ASSET_NAME}.sha1 | awk '{ print $ 1 }') -timestamp=$(node -e 'console.log(Date.now())') -sha256hash=$(cat ${ASSET_PATH}/${ASSET_NAME}.sha256 | awk '{ print $ 1 }') - -# check that nothing is blank (blank indicates something awry with build) -for key in url name version productVersion sha1hash timestamp sha256hash; do - if [[ "${!key}" == "" ]]; then - echo "Missing data for version update; exiting..." - exit 1 - fi -done - -# generate json -JSON=$(jq \ - --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' \ - <<<'{}') - -echo $JSON - -# clone down the current versions repo -# create/update the latest.json file in the correct location -# commit and push (thank you https://www.vinaygopinath.me/blog/tech/commit-to-master-branch-on-github-using-travis-ci/) -git clone https://github.com/VSCodium/versions.git cd versions -git config user.email "travis@travis-ci.org" -git config user.name "Travis CI" -mkdir -p $VERSION_PATH -echo $JSON > $VERSION_PATH/latest.json -git add $VERSION_PATH + +git add . dateAndMonth=`date "+%D %T"` git commit -m "Travis update: $dateAndMonth (Build $TRAVIS_BUILD_NUMBER)" -git remote rm origin -git remote add origin https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/VSCodium/versions.git > /dev/null 2>&1 git push origin master --quiet + +cd .. diff --git a/win32-build.yml b/win32-build.yml index 62fcb9b..fc3538e 100644 --- a/win32-build.yml +++ b/win32-build.yml @@ -16,9 +16,11 @@ steps: inputs: scriptPath: get_repo.sh - powershell: | + $LATEST_MS_COMMIT="$(git -C vscode rev-list --tags --max-count=1)" $LATEST_MS_TAG="$(git -C vscode describe --tags)" Write-Host "##vso[task.setvariable variable=LATEST_MS_TAG]$LATEST_MS_TAG" - displayName: 'set env LATEST_MS_TAG' + Write-Host "##vso[task.setvariable variable=LATEST_MS_COMMIT]$LATEST_MS_COMMIT" + displayName: 'set env LATEST_MS_TAG, LATEST_MS_COMMIT' - task: PowerShell@2 inputs: filePath: 'check_tags.ps1' @@ -40,9 +42,7 @@ steps: if [[ "$SHOULD_BUILD" == "yes" ]]; then mv vscode\\.build\\win32-$(BUILDARCH)\\archive\\VSCode-win32-$(BUILDARCH).zip VSCodium-win32-$(BUILDARCH)-${LATEST_MS_TAG}.zip; fi displayName: 'move the zip folder' - powershell: | - Get-FileHash VSCodiumSetup-$(BUILDARCH)-$(LATEST_MS_TAG).exe -Algorithm SHA256 | Format-List > VSCodiumSetup-$(BUILDARCH)-$(LATEST_MS_TAG).sha256 - Get-FileHash VSCodiumUserSetup-$(BUILDARCH)-$(LATEST_MS_TAG).exe -Algorithm SHA256 | Format-List > VSCodiumUserSetup-$(BUILDARCH)-$(LATEST_MS_TAG).sha256 - Get-FileHash VSCodium-win32-$(BUILDARCH)-$(LATEST_MS_TAG).zip -Algorithm SHA256 | Format-List > VSCodium-win32-$(BUILDARCH)-$(LATEST_MS_TAG).sha256 + bash ./sum.sh condition: eq(variables['SHOULD_BUILD'], 'yes') displayName: 'compute sums' - task: CopyFiles@2 @@ -61,3 +61,8 @@ steps: inputs: PathtoPublish: $(Build.ArtifactStagingDirectory) ArtifactName: 'everything' +- bash: ./update_version.sh + displayName: 'update version json' + env: + GITHUB_TOKEN: $(GITHUB_TOKEN) + GITHUB_USERNAME: $(GITHUB_USERNAME)