name: Build and Release on: workflow_dispatch: inputs: version: description: 'Netmaker version' required: true release: types: [published] jobs: version: runs-on: ubuntu-latest outputs: tag: ${{ steps.echo.outputs.tag }} version: ${{ steps.echo.outputs.version }} steps: - name: Get Version Number run: | if [[ -n "${{ github.event.inputs.version }}" ]]; then NETMAKER_VERSION=${{ github.event.inputs.version }} else NETMAKER_VERSION=$(curl -fsSL https://api.github.com/repos/gravitl/netmaker/tags | grep 'name' | head -1 | cut -d'"' -f4) fi echo "NETMAKER_VERSION=${NETMAKER_VERSION}" >> $GITHUB_ENV # remove everything but digits and . for package (deb, rpm, etc) versions PACKAGE_VERSION=$(echo ${NETMAKER_VERSION} | tr -cd '[:digit:].') echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV - name: Echo id: echo run: | echo ${{ env.NETMAKER_VERSION }} echo ${{ env.PACKAGE_VERSION }} if [[ -z ${{ env.NETMAKER_VERSION }} || -z ${{ env.PACKAGE_VERSION }} ]] then exit 1 fi echo "::set-output name=tag::${{ env.NETMAKER_VERSION }}" echo "::set-output name=version::${{ env.PACKAGE_VERSION }}" netmaker: runs-on: ubuntu-latest needs: version steps: - name: set variables run: | echo ${{ needs.version.outputs.tag }} ${{ needs.version.outputs.version }} TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} if [[ -z ${VERSION} || -z ${TAG} ]]; then exit 1 fi echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v2 - name: Setup go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Build run: | env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netmaker main.go - name: Upload netmaker x86 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: build/netmaker tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netmaker netclient-x86: runs-on: ubuntu-latest needs: version steps: - name: Checkout uses: actions/checkout@v2 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Setup go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Build cli run: | cd netclient env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient main.go - name: Upload netclient x86 to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient - name: build gui run: | sudo apt-get install -y gcc libgl1-mesa-dev xorg-dev go build -tags=gui -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-gui . - name: Upload netclient x86 gui to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-gui tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-gui - name: Package x86 deb continue-on-error: true uses: gravitl/github-action-fpm@master with: fpm_args: './netclient/build/netclient=/sbin/netclient ./netclient/build/netclient.service=/lib/systemd/system/netclient.service' fpm_opts: '-s dir -t deb --architecture amd64 --version ${{ env.PACKAGE_VERSION }}' - name: Upload x86 deb to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient_${{ env.PACKAGE_VERSION }}_amd64.deb tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient_${{ env.PACKAGE_VERSION }}_amd64.deb - name: Package x86 rpm continue-on-error: true uses: gravitl/github-action-fpm@master with: fpm_args: './netclient/build/netclient=/sbin/netclient ./netclient/build/netclient.service=/lib/systemd/system/netclient.service' fpm_opts: '-s dir -t rpm --architecture amd64 --version ${{ env.PACKAGE_VERSION }}' - name: Upload x86 rpm to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient-${{ env.PACKAGE_VERSION }}-1.x86_64.rpm tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-${{ env.PACKAGE_VERSION }}-1.x86_64.rpm - name: Package x86 pacman continue-on-error: true uses: gravitl/github-action-fpm@master with: # arch has particular path requirements --- cannot write to a symbolic link e.g. /sbin and /lib fpm_args: './netclient/build/netclient=/usr/bin/netclient ./netclient/build/netclient.service=/usr/lib/systemd/system/netclient.service' fpm_opts: '-s dir -t pacman --architecture amd64 --version ${{ env.PACKAGE_VERSION }}' - name: Upload x86 pacman to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient-${{ env.PACKAGE_VERSION }}-1-x86_64.pkg.tar.zst tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-${{ env.PACKAGE_VERSION }}-1-x86_64.pkg.tar.zst netclient-arm: runs-on: ubuntu-latest needs: version steps: - name: Checkout uses: actions/checkout@v2 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Setup go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Build run: | cd netclient env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-arm5/netclient main.go env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-arm6/netclient main.go env CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-arm7/netclient main.go env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-arm64/netclient main.go - name: Upload arm5 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-arm5/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-arm5 - name: Upload arm6 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-arm6/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-arm6 - name: Upload arm7 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-arm7/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-arm7 - name: Upload arm64 to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-arm64/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-arm64 - name: Package arm64 deb continue-on-error: true uses: gravitl/github-action-fpm@master with: fpm_args: './netclient/build/netclient-arm64/netclient=/sbin/netclient ./netclient/build/netclient.service=/lib/systemd/netclient.service' fpm_opts: '-s dir -t deb --architecture arm64 --version ${{ env.PACKAGE_VERSION }}' - name: Upload arm deb to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient_${{ env.PACKAGE_VERSION }}_arm64.deb tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient_${{ env.PACKAGE_VERSION }}_arm64.deb - name: Package arm64 rpm continue-on-error: true uses: gravitl/github-action-fpm@master with: fpm_args: './netclient/build/netclient-arm64/netclient=/sbin/netclient ./netclient/build/netclient.service=/lib/systemd/netclient.service' fpm_opts: '-s dir -t rpm --architecture arm64 --version ${{ env.PACKAGE_VERSION }}' - name: Upload arm64 rpm to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient-${{ env.PACKAGE_VERSION }}-1.aarch64.rpm tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-${{ env.PACKAGE_VERSION }}-1.aarch64.rpm netclient-mipsle: runs-on: ubuntu-latest needs: version steps: - name: Checkout uses: actions/checkout@v2 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Setup go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Build run: | cd netclient env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "-s -w -X 'main.version=$NETMAKER_VERSION'" -o build/netclient-mipsle/netclient main.go && upx build/netclient-mipsle/netclient - name: Upload mipsle to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-mipsle/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-mipsle netclient-freebsd: runs-on: ubuntu-latest needs: version steps: - name: Checkout uses: actions/checkout@v2 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Setup go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Build run: | cd netclient env CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -ldflags="-X 'main.Version=${NETMAKER_VERSION}'" -o build/netclient-freebsd/netclient main.go env CGO_ENABLED=0 GOOS=freebsd GOARCH=arm GOARM=5 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-freebsd-arm5/netclient main.go env CGO_ENABLED=0 GOOS=freebsd GOARCH=arm GOARM=6 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-freebsd-arm6/netclient main.go env CGO_ENABLED=0 GOOS=freebsd GOARCH=arm GOARM=7 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-freebsd-arm7/netclient main.go env CGO_ENABLED=0 GOOS=freebsd GOARCH=arm64 go build -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-freebsd-arm64/netclient main.go - name: Upload freebsd to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-freebsd/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-freebsd - name: Upload freebsd-arm5 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-freebsd-arm5/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-freebsd-arm5 - name: Upload freebsd-arm6 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-freebsd-arm6/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-freebsd-arm6 - name: Upload freebsd-arm7 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-freebsd-arm7/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-freebsd-arm7 - name: Upload freebsd-arm64 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-freebsd-arm64/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-freebsd-arm64 netclient-darwin: runs-on: macos-latest needs: version steps: - name: Checkout uses: actions/checkout@v2 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV - name: Setup go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Build run: | cd netclient env GOOS=darwin GOARCH=amd64 go build -tags=gui -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-darwin/netclient . env CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -tags=gui -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient-darwin-arm64/netclient main.go - name: Upload darwin-amd64 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-darwin/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-darwin - name: Upload darwin-arm64 to Release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient-darwin-arm64/netclient tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient-darwin-arm64 netclient-windows: runs-on: windows-latest needs: version steps: - name: Checkout uses: actions/checkout@v2 - name: Set Variables run: | TAG=${{needs.version.outputs.tag}} VERSION=${{needs.version.outputs.version}} echo "NETMAKER_VERSION=${TAG}" >> $GITHUB_ENV echo "PACKAGE_VERSION=${VERSION}" >> $GITHUB_ENV shell: bash - name: Setup go uses: actions/setup-go@v3 with: go-version: 1.18 - name: Mysys2 setup uses: msys2/setup-msys2@v2 with: install: >- git mingw-w64-x86_64-toolchain - name: Build run: | echo $(go env GOPATH)/bin >> $GITHUB_PATH cd netclient go get -v github.com/josephspurrier/goversioninfo go install -v github.com/josephspurrier/goversioninfo/cmd/goversioninfo go generate go build -tags=gui -ldflags="-X 'main.version=${NETMAKER_VERSION}'" -o build/netclient.exe . - name: Upload netclient windows to Release continue-on-error: true uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: netclient/build/netclient.exe tag: ${{ env.NETMAKER_VERSION }} overwrite: true prerelease: true asset_name: netclient.exe linux-packages: runs-on: ubuntu-latest needs: [version, netclient-x86, netclient-arm] steps: - name: Repository Dispatch uses: peter-evans/repository-dispatch@v2.0.0 with: token: ${{ secrets.PERS_TOKEN_FOR_NETMAKER_DEVOPS}} repository: gravitl/netmaker-devops event-type: build-packages client-payload: '{"VERSION": "${{ env.PACKAGE_VERSION }}"}'