From bc78530fcbc144a77c979cef4e971610dc301a83 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sun, 17 Apr 2022 23:38:16 +0100 Subject: [PATCH] Build packages in GitHub Actions --- .github/workflows/ci.yml | 132 +++++++++++++++++++++++++++++++++++++++ contrib/msi/build-msi.sh | 38 ++++------- contrib/semver/name.sh | 11 ++-- 3 files changed, 148 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c9268f15..a884d762 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,3 +102,135 @@ jobs: uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }} + + build-packages-debian: + strategy: + fail-fast: false + matrix: + pkgarch: ["amd64", "i386", "mips", "mipsel", "armhf", "armel", "arm64"] + + name: Create Package (Debian, ${{ matrix.pkgarch }}) + needs: [tests-ok] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.18 + + - name: Build package + env: + PKGARCH: ${{ matrix.pkgarch }} + run: sh contrib/deb/generate.sh + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: Debian package (${{ matrix.pkgarch }}) + path: "*.deb" + if-no-files-found: error + + build-packages-macos: + strategy: + fail-fast: false + matrix: + pkgarch: ["amd64", "arm64"] + + name: Create Package (macOS, ${{ matrix.pkgarch }}) + needs: [tests-ok] + + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.18 + + - name: Build package + env: + PKGARCH: ${{ matrix.pkgarch }} + run: sh contrib/macos/create-pkg.sh + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: macOS package (${{ matrix.pkgarch }}) + path: "*.pkg" + if-no-files-found: error + + build-packages-windows: + strategy: + fail-fast: false + matrix: + pkgarch: ["x64", "x86", "arm", "arm64"] + + name: Create Package (Windows, ${{ matrix.pkgarch }}) + needs: [tests-ok] + + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.18 + + - name: Build package + run: sh contrib/msi/build-msi.sh ${{ matrix.pkgarch }} + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: Windows package (${{ matrix.pkgarch }}) + path: "*.msi" + if-no-files-found: error + + build-packages-router: + strategy: + fail-fast: false + matrix: + pkgarch: ["edgerouter-x", "edgerouter-lite", "vyos-amd64", "vyos-i386"] + + name: Create Package (Router, ${{ matrix.pkgarch }}) + needs: [tests-ok] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + path: yggdrasil + + - uses: actions/checkout@v3 + with: + repository: neilalexander/vyatta-yggdrasil + path: vyatta-yggdrasil + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.18 + + - name: Build package + env: + BUILDDIR_YGG: /home/runner/work/yggdrasil-go/yggdrasil-go/yggdrasil + run: cd /home/runner/work/yggdrasil-go/yggdrasil-go/vyatta-yggdrasil && ./build-${{ matrix.pkgarch }} + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: Router package (${{ matrix.pkgarch }}) + path: "/home/runner/work/yggdrasil-go/yggdrasil-go/vyatta-yggdrasil/*.deb" + if-no-files-found: error diff --git a/contrib/msi/build-msi.sh b/contrib/msi/build-msi.sh index 888075c8..38b9b810 100644 --- a/contrib/msi/build-msi.sh +++ b/contrib/msi/build-msi.sh @@ -1,9 +1,9 @@ #!/bin/sh # This script generates an MSI file for Yggdrasil for a given architecture. It -# needs to run on Windows within MSYS2 and Go 1.13 or later must be installed on -# the system and within the PATH. This is ran currently by Appveyor (see -# appveyor.yml in the repository root) for both x86 and x64. +# needs to run on Windows within MSYS2 and Go 1.17 or later must be installed on +# the system and within the PATH. This is ran currently by GitHub Actions (see +# the workflows in the repository). # # Author: Neil Alexander @@ -11,37 +11,21 @@ PKGARCH=$1 if [ "${PKGARCH}" == "" ]; then - echo "tell me the architecture: x86, x64 or arm" + echo "tell me the architecture: x86, x64, arm or arm64" exit 1 fi -# Get the rest of the repository history. This is needed within Appveyor because -# otherwise we don't get all of the branch histories and therefore the semver -# scripts don't work properly. -if [ "${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH}" != "" ]; -then - git fetch --all -# git checkout ${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH} -elif [ "${APPVEYOR_REPO_BRANCH}" != "" ]; -then - git fetch --all - git checkout ${APPVEYOR_REPO_BRANCH} -fi - -# Install prerequisites within MSYS2 -pacman -S --needed --noconfirm unzip git curl - # Download the wix tools! if [ ! -d wixbin ]; then - curl -LO https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip - if [ `md5sum wix311-binaries.zip | cut -f 1 -d " "` != "47a506f8ab6666ee3cc502fb07d0ee2a" ]; + curl -LO https://wixtoolset.org/downloads/v3.14.0.3910/wix314-binaries.zip + if [ `md5sum wix314-binaries.zip | cut -f 1 -d " "` != "34f655cf108086838dd5a76d4318063b" ]; then echo "wix package didn't match expected checksum" exit 1 fi mkdir -p wixbin - unzip -o wix311-binaries.zip -d wixbin || ( + unzip -o wix314-binaries.zip -d wixbin || ( echo "failed to unzip WiX" exit 1 ) @@ -51,7 +35,7 @@ fi [ "${PKGARCH}" == "x64" ] && GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./build [ "${PKGARCH}" == "x86" ] && GOOS=windows GOARCH=386 CGO_ENABLED=0 ./build [ "${PKGARCH}" == "arm" ] && GOOS=windows GOARCH=arm CGO_ENABLED=0 ./build -#[ "${PKGARCH}" == "arm64" ] && GOOS=windows GOARCH=arm64 CGO_ENABLED=0 ./build +[ "${PKGARCH}" == "arm64" ] && GOOS=windows GOARCH=arm64 CGO_ENABLED=0 ./build # Create the postinstall script cat > updateconfig.bat << EOF @@ -69,7 +53,7 @@ EOF PKGNAME=$(sh contrib/semver/name.sh) PKGVERSION=$(sh contrib/msi/msversion.sh --bare) PKGVERSIONMS=$(echo $PKGVERSION | tr - .) -[ "${PKGARCH}" == "x64" ] && \ +([ "${PKGARCH}" == "x64" ] || [ "${PKGARCH}" == "arm64" ]) && \ PKGGUID="77757838-1a23-40a5-a720-c3b43e0260cc" PKGINSTFOLDER="ProgramFiles64Folder" || \ PKGGUID="54a3294e-a441-4322-aefb-3bb40dd022bb" PKGINSTFOLDER="ProgramFilesFolder" @@ -85,8 +69,8 @@ elif [ $PKGARCH = "x86" ]; then PKGWINTUNDLL=wintun/bin/x86/wintun.dll elif [ $PKGARCH = "arm" ]; then PKGWINTUNDLL=wintun/bin/arm/wintun.dll -#elif [ $PKGARCH = "arm64" ]; then -# PKGWINTUNDLL=wintun/bin/arm64/wintun.dll +elif [ $PKGARCH = "arm64" ]; then + PKGWINTUNDLL=wintun/bin/arm64/wintun.dll else echo "wasn't sure which architecture to get wintun for" exit 1 diff --git a/contrib/semver/name.sh b/contrib/semver/name.sh index 53f56d5f..6294f896 100644 --- a/contrib/semver/name.sh +++ b/contrib/semver/name.sh @@ -1,13 +1,12 @@ #!/bin/sh # Get the current branch name -BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) +BRANCH="$GITHUB_REF_NAME" +if [ -z "$BRANCH" ]; then + BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) +fi -if [ -n "$APPVEYOR_PULL_REQUEST_NUMBER" ]; then - printf "yggdrasil-pr%s" "$APPVEYOR_PULL_REQUEST_NUMBER" - exit 0 -# Complain if the git history is not available -elif [ $? != 0 ] || [ -z "$BRANCH" ]; then +if [ $? != 0 ] || [ -z "$BRANCH" ]; then printf "yggdrasil" exit 0 fi