mirror of
https://github.com/slackhq/nebula.git
synced 2025-11-08 16:23:58 +01:00
These new helpers make the code a lot cleaner. I confirmed that the simple helpers like `atomic.Int64` don't add any extra overhead as they get inlined by the compiler. `atomic.Pointer` adds an extra method call as it no longer gets inlined, but we aren't using these on the hot path so it is probably okay.
354 lines
13 KiB
YAML
354 lines
13 KiB
YAML
on:
|
|
push:
|
|
tags:
|
|
- 'v[0-9]+.[0-9]+.[0-9]*'
|
|
|
|
name: Create release and upload binaries
|
|
|
|
jobs:
|
|
build-linux:
|
|
name: Build Linux All
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Set up Go 1.19
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.19
|
|
|
|
- name: Checkout code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Build
|
|
run: |
|
|
make BUILD_NUMBER="${GITHUB_REF#refs/tags/v}" release-linux release-freebsd
|
|
mkdir release
|
|
mv build/*.tar.gz release
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: linux-latest
|
|
path: release
|
|
|
|
build-windows:
|
|
name: Build Windows
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Set up Go 1.19
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.19
|
|
|
|
- name: Checkout code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Build
|
|
run: |
|
|
echo $Env:GITHUB_REF.Substring(11)
|
|
mkdir build\windows-amd64
|
|
$Env:GOARCH = "amd64"
|
|
go build -trimpath -ldflags "-X main.Build=$($Env:GITHUB_REF.Substring(11))" -o build\windows-amd64\nebula.exe ./cmd/nebula-service
|
|
go build -trimpath -ldflags "-X main.Build=$($Env:GITHUB_REF.Substring(11))" -o build\windows-amd64\nebula-cert.exe ./cmd/nebula-cert
|
|
mkdir build\windows-arm64
|
|
$Env:GOARCH = "arm64"
|
|
go build -trimpath -ldflags "-X main.Build=$($Env:GITHUB_REF.Substring(11))" -o build\windows-arm64\nebula.exe ./cmd/nebula-service
|
|
go build -trimpath -ldflags "-X main.Build=$($Env:GITHUB_REF.Substring(11))" -o build\windows-arm64\nebula-cert.exe ./cmd/nebula-cert
|
|
mkdir build\dist\windows
|
|
mv dist\windows\wintun build\dist\windows\
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: windows-latest
|
|
path: build
|
|
|
|
build-darwin:
|
|
name: Build Universal Darwin
|
|
env:
|
|
HAS_SIGNING_CREDS: ${{ secrets.AC_USERNAME != '' }}
|
|
runs-on: macos-11
|
|
steps:
|
|
- name: Set up Go 1.19
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.19
|
|
|
|
- name: Checkout code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Import certificates
|
|
if: env.HAS_SIGNING_CREDS == 'true'
|
|
uses: Apple-Actions/import-codesign-certs@v1
|
|
with:
|
|
p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
|
|
p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
|
|
|
|
- name: Build, sign, and notarize
|
|
env:
|
|
AC_USERNAME: ${{ secrets.AC_USERNAME }}
|
|
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
|
|
run: |
|
|
rm -rf release
|
|
mkdir release
|
|
make BUILD_NUMBER="${GITHUB_REF#refs/tags/v}" service build/darwin-amd64/nebula build/darwin-amd64/nebula-cert
|
|
make BUILD_NUMBER="${GITHUB_REF#refs/tags/v}" service build/darwin-arm64/nebula build/darwin-arm64/nebula-cert
|
|
lipo -create -output ./release/nebula ./build/darwin-amd64/nebula ./build/darwin-arm64/nebula
|
|
lipo -create -output ./release/nebula-cert ./build/darwin-amd64/nebula-cert ./build/darwin-arm64/nebula-cert
|
|
|
|
if [ -n "$AC_USERNAME" ]; then
|
|
codesign -s "10BC1FDDEB6CE753550156C0669109FAC49E4D1E" -f -v --timestamp --options=runtime -i "net.defined.nebula" ./release/nebula
|
|
codesign -s "10BC1FDDEB6CE753550156C0669109FAC49E4D1E" -f -v --timestamp --options=runtime -i "net.defined.nebula-cert" ./release/nebula-cert
|
|
fi
|
|
|
|
zip -j release/nebula-darwin.zip release/nebula-cert release/nebula
|
|
|
|
if [ -n "$AC_USERNAME" ]; then
|
|
xcrun notarytool submit ./release/nebula-darwin.zip --team-id "576H3XS7FP" --apple-id "$AC_USERNAME" --password "$AC_PASSWORD" --wait
|
|
fi
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: darwin-latest
|
|
path: ./release/*
|
|
|
|
release:
|
|
name: Create and Upload Release
|
|
needs: [build-linux, build-darwin, build-windows]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v2
|
|
|
|
- name: Zip Windows
|
|
run: |
|
|
cd windows-latest
|
|
cp windows-amd64/* .
|
|
zip -r nebula-windows-amd64.zip nebula.exe nebula-cert.exe dist
|
|
cp windows-arm64/* .
|
|
zip -r nebula-windows-arm64.zip nebula.exe nebula-cert.exe dist
|
|
|
|
- name: Create sha256sum
|
|
run: |
|
|
for dir in linux-latest darwin-latest windows-latest
|
|
do
|
|
(
|
|
cd $dir
|
|
if [ "$dir" = windows-latest ]
|
|
then
|
|
sha256sum <windows-amd64/nebula.exe | sed 's=-$=nebula-windows-amd64.zip/nebula.exe='
|
|
sha256sum <windows-amd64/nebula-cert.exe | sed 's=-$=nebula-windows-amd64.zip/nebula-cert.exe='
|
|
sha256sum <windows-arm64/nebula.exe | sed 's=-$=nebula-windows-arm64.zip/nebula.exe='
|
|
sha256sum <windows-arm64/nebula-cert.exe | sed 's=-$=nebula-windows-arm64.zip/nebula-cert.exe='
|
|
sha256sum nebula-windows-amd64.zip
|
|
sha256sum nebula-windows-arm64.zip
|
|
elif [ "$dir" = darwin-latest ]
|
|
then
|
|
sha256sum <nebula-darwin.zip | sed 's=-$=nebula-darwin.zip='
|
|
sha256sum <nebula | sed 's=-$=nebula-darwin.zip/nebula='
|
|
sha256sum <nebula-cert | sed 's=-$=nebula-darwin.zip/nebula-cert='
|
|
else
|
|
for v in *.tar.gz
|
|
do
|
|
sha256sum $v
|
|
tar zxf $v --to-command='sh -c "sha256sum | sed s=-$='$v'/$TAR_FILENAME="'
|
|
done
|
|
fi
|
|
)
|
|
done | sort -k 2 >SHASUM256.txt
|
|
|
|
- name: Create Release
|
|
id: create_release
|
|
uses: actions/create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.ref }}
|
|
release_name: Release ${{ github.ref }}
|
|
draft: false
|
|
prerelease: false
|
|
|
|
##
|
|
## Upload assets (I wish we could just upload the whole folder at once...
|
|
##
|
|
|
|
- name: Upload SHASUM256.txt
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./SHASUM256.txt
|
|
asset_name: SHASUM256.txt
|
|
asset_content_type: text/plain
|
|
|
|
- name: Upload darwin zip
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./darwin-latest/nebula-darwin.zip
|
|
asset_name: nebula-darwin.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload windows-amd64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./windows-latest/nebula-windows-amd64.zip
|
|
asset_name: nebula-windows-amd64.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload windows-arm64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./windows-latest/nebula-windows-arm64.zip
|
|
asset_name: nebula-windows-arm64.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload linux-amd64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-amd64.tar.gz
|
|
asset_name: nebula-linux-amd64.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-386
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-386.tar.gz
|
|
asset_name: nebula-linux-386.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-ppc64le
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-ppc64le.tar.gz
|
|
asset_name: nebula-linux-ppc64le.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-arm-5
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-arm-5.tar.gz
|
|
asset_name: nebula-linux-arm-5.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-arm-6
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-arm-6.tar.gz
|
|
asset_name: nebula-linux-arm-6.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-arm-7
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-arm-7.tar.gz
|
|
asset_name: nebula-linux-arm-7.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-arm64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-arm64.tar.gz
|
|
asset_name: nebula-linux-arm64.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-mips
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-mips.tar.gz
|
|
asset_name: nebula-linux-mips.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-mipsle
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-mipsle.tar.gz
|
|
asset_name: nebula-linux-mipsle.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-mips64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-mips64.tar.gz
|
|
asset_name: nebula-linux-mips64.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-mips64le
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-mips64le.tar.gz
|
|
asset_name: nebula-linux-mips64le.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-mips-softfloat
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-mips-softfloat.tar.gz
|
|
asset_name: nebula-linux-mips-softfloat.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload linux-riscv64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-linux-riscv64.tar.gz
|
|
asset_name: nebula-linux-riscv64.tar.gz
|
|
asset_content_type: application/gzip
|
|
|
|
- name: Upload freebsd-amd64
|
|
uses: actions/upload-release-asset@v1.0.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: ./linux-latest/nebula-freebsd-amd64.tar.gz
|
|
asset_name: nebula-freebsd-amd64.tar.gz
|
|
asset_content_type: application/gzip
|