From e73f573361f5ad3452a0ae7ce2463198462c8a7f Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Fri, 3 Dec 2021 18:02:32 +0700 Subject: [PATCH 1/3] Fix local build --- docker/scripts/get-version-number.sh | 79 ++++++++++++++++++++++++++++ pbuild.sh | 21 ++++---- 2 files changed, 90 insertions(+), 10 deletions(-) create mode 100755 docker/scripts/get-version-number.sh diff --git a/docker/scripts/get-version-number.sh b/docker/scripts/get-version-number.sh new file mode 100755 index 00000000..1f352107 --- /dev/null +++ b/docker/scripts/get-version-number.sh @@ -0,0 +1,79 @@ +#!/bin/bash + + echo Start + REV=${GITHUB_REF:-$(git rev-parse --symbolic-full-name HEAD)} + DESCRIBE=$(git describe --long --match "v*") + MAJOR=$(echo "$DESCRIBE" | sed -E 's/^v([0-9]+)\.([0-9]+)\.([0-9]+).*$/\1/') + MINOR=$(echo "$DESCRIBE" | sed -E 's/^v([0-9]+)\.([0-9]+)\.([0-9]+).*$/\2/') + PATCH=$(echo "$DESCRIBE" | sed -E 's/^v([0-9]+)\.([0-9]+)\.([0-9]+).*$/\3/') + # TODO: Detect need for minor/major updates and increment those instead of PATCH + COMMIT_COUNT=$(echo "$DESCRIBE" | sed -E 's/^[^-]+-([^-]+)-.*$/\1/') + COMMIT_HASH=$(echo "$DESCRIBE" | sed -E 's/^[^-]+-[^-]+-g(.*)$/\1/') + if [ -n "$COMMIT_COUNT" -a "$COMMIT_COUNT" -gt 0 ]; then + # If we're building from a tagged version, rebuild precisely that version + PATCH=$((${PATCH} + 1)) + fi + echo "Build number before: $BUILD_NUMBER" + export BUILD_NUMBER=${BUILD_NUMBER:-${COMMIT_COUNT}} + echo "Build number after: $BUILD_NUMBER" + export MajorMinorPatch="${MAJOR}.${MINOR}.${PATCH}" + export AssemblySemVer="${MajorMinorPatch}.${BUILD_NUMBER}" + export AssemblySemFileVer="${MajorMinorPatch}.0" + export InformationalVersion="${DESCRIBE}" + echo "Calculating name from ${REV}" + if [ -z ${REV} ]; then + echo Failed to get a meaningful commit name + fi + echo Got commit name ${REV} + RESULT=notfound + if echo "${REV}" | grep -E '^refs/pull/'; then + echo Found PR + RESULT=$(echo "${REV}" | sed -E 's/^refs\/pull\/([0-9]+)\/merge/\1/') + fi + if echo "${REV}" | grep -E '^refs/heads/'; then + echo Found branch + RESULT=$(echo "${REV}" | sed -E 's/^refs\/heads\///') + fi + if echo "${REV}" | grep -E '^refs/tags/'; then + echo Found tag + RESULT=$(echo "${REV}" | sed -E 's/^refs\/tags\///') + fi + echo Will calculate version from "${RESULT}" and "${MAJOR}.${MINOR}.${PATCH} with $COMMIT_COUNT commits since then, and current hash $COMMIT_HASH" + + case "$REV" in + refs/heads/master | refs/heads/fieldworks8-master) + PRERELEASE="~alpha.${BUILD_NUMBER}" + ;; + + refs/heads/qa | refs/heads/fieldworks8-qa) + PRERELEASE="~beta.${BUILD_NUMBER}" + ;; + + refs/heads/live | refs/heads/fieldworks8-live) + PRERELEASE= + ;; + + refs/pull/*) + PR_NUMBER=$(echo "${REV}" | sed -E 's/^refs\/pull\/([0-9]+)\/merge/\1/') + PRERELEASE="~PR${PR_NUMBER}.${BUILD_NUMBER}" + ;; + + refs/heads/*) + PRERELEASE="~${REV##refs/heads/}.${BUILD_NUMBER}" + ;; + + *) + echo "Could not determine version number from ${REV}" + echo "::error ::Could not determine version number from ${REV}" + exit 1 + + esac + export DebPackageVersion=${MAJOR}.${MINOR}.${PATCH}${PRERELEASE} + export MsBuildVersion=$(echo "${DebPackageVersion}" | sed 's/~/-/') + echo "Will build package version ${DebPackageVersion}" + echo "::set-output name=DebPackageVersion::${DebPackageVersion}" + echo "::set-output name=MsBuildVersion::${MsBuildVersion}" + echo "::set-output name=MajorMinorPatch::${MajorMinorPatch}" + echo "::set-output name=AssemblySemVer::${AssemblySemVer}" + echo "::set-output name=AssemblySemFileVer::${AssemblySemFileVer}" + echo "::set-output name=InformationalVersion::${InformationalVersion}" diff --git a/pbuild.sh b/pbuild.sh index d8087831..14bd0cb2 100755 --- a/pbuild.sh +++ b/pbuild.sh @@ -10,27 +10,28 @@ for f in 68 69 70 72; do done # First create the base build container ONCE (not in parallel), to ensure that the slow steps (apt-get install mono5-sil) are cached -docker build -t lfmerge-builder-base --target lfmerge-builder-base -f combined.dockerfile . +docker build -t lfmerge-builder-base --target lfmerge-builder-base . # Create the build containers in series, because I've had trouble when creating them in parallel # (To create the build containers in series, which might be necessary if you have trouble with # Docker caching while creating them in parallel, just comment out the "time parallel" and "EOF" lines) time parallel --no-notice < Date: Tue, 7 Dec 2021 11:02:53 +0700 Subject: [PATCH 2/3] Local build now figures out FW8 and FW9 branches This isn't needed in the GitHub Actions workflow since that runs in separate containers with their own individually-checked-out copies of the repo, but in the local build we only have one checked-out branch, and we need to figure out the other branch to build. E.g. if the checked-out branch comes from a FW9 branch, then we need to calculate which FW8 branch to build (and default to fieldworks8-master). If the checked-out branch is a FW8 branch, then we need to figure out which FW9 branch to build, and default to master. --- docker/scripts/setup-workspace.sh | 3 ++ pbuild.sh | 46 ++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/docker/scripts/setup-workspace.sh b/docker/scripts/setup-workspace.sh index d7d2146d..457dac1e 100755 --- a/docker/scripts/setup-workspace.sh +++ b/docker/scripts/setup-workspace.sh @@ -17,6 +17,9 @@ cp "${DEST}/docker/common.sh" "${HOME}/ci-builder-scripts/bash/" cp "${DEST}/docker/make-source" "${HOME}/ci-builder-scripts/bash/" cd "${DEST}" +if [ "${BRANCH_TO_BUILD}" ]; then + git checkout "${BRANCH_TO_BUILD}" +fi git clean -dxf --exclude=packages/ git reset --hard diff --git a/pbuild.sh b/pbuild.sh index 14bd0cb2..abcf7604 100755 --- a/pbuild.sh +++ b/pbuild.sh @@ -2,6 +2,44 @@ which parallel >/dev/null || (echo 'Please run "sudo apt-get install parallel" and try again.'; exit 1) +# Find appropriate branch(es) to build +CURRENT_BRANCH="$(git name-rev --name-only HEAD)" +PARENT_MAJOR_VERSION=$(git describe --long --match "v*" | cut -c1-2) + +# FW8 branches will have ancestors tagged v1.x, while FW9 branches will have ancestors tagged v2.x +if [ "x$PARENT_MAJOR_VERSION" = "xv2" ]; then + IS_FW9=true +else + IS_FW9="" +fi + +if [ "${IS_FW9}" ]; then + echo Current branch is FW9, detecting FW8 branch to use... + FW9_BUILD_BRANCH="${CURRENT_BRANCH}" + if [ "$1" ]; then + FW8_BUILD_BRANCH="$1" + elif [ "${CURRENT_BRANCH}" = "master" -o "${CURRENT_BRANCH}" = "qa" -o "${CURRENT_BRANCH}" = "live" ]; then + FW8_BUILD_BRANCH="fieldworks8-${CURRENT_BRANCH}" + else + echo No FW 8 branch specified, assuming fieldworks8-master + echo To specify a different branch, run pbuild.sh '<'fw8-branch'>', e.g. '"'pbuild.sh feature/some-fw8-branch'"' + FW8_BUILD_BRANCH="fieldworks8-master" + fi +else + echo Current branch is FW8, detecting FW9 branch to use... + FW8_BUILD_BRANCH="${CURRENT_BRANCH}" + if [ "$1" ]; then + FW9_BUILD_BRANCH="$1" + elif [ "${CURRENT_BRANCH}" = "fieldworks8-master" -o "${CURRENT_BRANCH}" = "fieldworks8-qa" -o "${CURRENT_BRANCH}" = "fieldworks8-live" ]; then + FW9_BUILD_BRANCH="${CURRENT_BRANCH##fieldworks8-}" + else + echo No FW 9 branch specified, assuming master + echo To specify a different branch, run pbuild.sh '<'fw8-branch'>', e.g. '"'pbuild.sh feature/some-fw8-branch'"' + FW9_BUILD_BRANCH="master" + fi +fi +echo Will build FW9 build from "${FW9_BUILD_BRANCH}" and FW8 builds from "${FW8_BUILD_BRANCH}" + # Clean up any previous builds for f in 68 69 70 72; do # for f in 72; do @@ -28,10 +66,10 @@ EOF # Run the build time parallel --no-notice < Date: Tue, 7 Dec 2021 11:20:57 +0700 Subject: [PATCH 3/3] No slash characters in branch names for version numbers --- .github/workflows/docker-build.yml | 3 ++- docker/scripts/get-version-number.sh | 3 ++- pbuild.sh | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 116053bb..c2bdb112 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -106,7 +106,8 @@ jobs: ;; refs/heads/*) - PRERELEASE="~${REV##refs/heads/}.${BUILD_NUMBER}" + BRANCH=$(echo "${REV##refs/heads/}" | sed 's/\//-/') + PRERELEASE="~${BRANCH}.${BUILD_NUMBER}" ;; *) diff --git a/docker/scripts/get-version-number.sh b/docker/scripts/get-version-number.sh index 1f352107..24330c94 100755 --- a/docker/scripts/get-version-number.sh +++ b/docker/scripts/get-version-number.sh @@ -59,7 +59,8 @@ ;; refs/heads/*) - PRERELEASE="~${REV##refs/heads/}.${BUILD_NUMBER}" + BRANCH=$(echo "${REV##refs/heads/}" | sed 's/\//-/') + PRERELEASE="~${BRANCH}.${BUILD_NUMBER}" ;; *) diff --git a/pbuild.sh b/pbuild.sh index abcf7604..b6e7f195 100755 --- a/pbuild.sh +++ b/pbuild.sh @@ -78,5 +78,5 @@ EOF # Collect results for f in 68 69 70 72; do # for f in 72; do - docker container cp tmp-lfmerge-build-70000${f}:/home/builder/repo/finalresults ./ + docker container cp tmp-lfmerge-build-70000${f}:/home/builder/packages/lfmerge/finalresults ./ done