Refactor update_version to support Windows builds

This commit is contained in:
Peter Squicciarini 2019-05-17 19:47:03 -07:00
parent 7b1c9aff73
commit d7fe3923fc
3 changed files with 117 additions and 53 deletions

8
sum.sh
View File

@ -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

View File

@ -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 ..

View File

@ -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)