name: Release on: push: tags: - 'v*' branches: - main pull_request: paths: - 'go.mod' - 'go.sum' - '.goreleaser.yml' - '.goreleaser_ui.yaml' - '.goreleaser_ui_darwin.yaml' - '.github/workflows/release.yml' - 'release_files/**' - '**/Dockerfile' - '**/Dockerfile.*' env: SIGN_PIPE_VER: "v0.0.9" GORELEASER_VER: "v1.14.1" concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.actor_id }} cancel-in-progress: true jobs: release: runs-on: ubuntu-latest env: flags: "" steps: - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} run: echo "flags=--snapshot" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 # It is required for GoReleaser to work properly - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.20" - name: Cache Go modules uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Install modules run: go mod tidy - name: check git status run: git --no-pager diff --exit-code - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker hub if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: netbirdio password: ${{ secrets.DOCKER_TOKEN }} - name: Install OS build dependencies run: sudo apt update && sudo apt install -y -q gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu - name: Install rsrc run: go install github.com/akavel/rsrc@v0.10.2 - name: Generate windows rsrc amd64 run: rsrc -arch amd64 -ico client/ui/netbird.ico -manifest client/manifest.xml -o client/resources_windows_amd64.syso - name: Generate windows rsrc arm64 run: rsrc -arch arm64 -ico client/ui/netbird.ico -manifest client/manifest.xml -o client/resources_windows_arm64.syso - name: Generate windows rsrc arm run: rsrc -arch arm -ico client/ui/netbird.ico -manifest client/manifest.xml -o client/resources_windows_arm.syso - name: Generate windows rsrc 386 run: rsrc -arch 386 -ico client/ui/netbird.ico -manifest client/manifest.xml -o client/resources_windows_386.syso - name: Run GoReleaser uses: goreleaser/goreleaser-action@v4 with: version: ${{ env.GORELEASER_VER }} args: release --rm-dist ${{ env.flags }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} UPLOAD_DEBIAN_SECRET: ${{ secrets.PKG_UPLOAD_SECRET }} UPLOAD_YUM_SECRET: ${{ secrets.PKG_UPLOAD_SECRET }} - name: upload non tags for debug purposes uses: actions/upload-artifact@v3 with: name: release path: dist/ retention-days: 3 release_ui: runs-on: ubuntu-latest steps: - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} run: echo "flags=--snapshot" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 # It is required for GoReleaser to work properly - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.20" - name: Cache Go modules uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-ui-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-ui-go- - name: Install modules run: go mod tidy - name: check git status run: git --no-pager diff --exit-code - name: Install dependencies run: sudo apt update && sudo apt install -y -q libappindicator3-dev gir1.2-appindicator3-0.1 libxxf86vm-dev gcc-mingw-w64-x86-64 - name: Install rsrc run: go install github.com/akavel/rsrc@v0.10.2 - name: Generate windows rsrc run: rsrc -arch amd64 -ico client/ui/netbird.ico -manifest client/ui/manifest.xml -o client/ui/resources_windows_amd64.syso - name: Run GoReleaser uses: goreleaser/goreleaser-action@v4 with: version: ${{ env.GORELEASER_VER }} args: release --config .goreleaser_ui.yaml --rm-dist ${{ env.flags }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} UPLOAD_DEBIAN_SECRET: ${{ secrets.PKG_UPLOAD_SECRET }} UPLOAD_YUM_SECRET: ${{ secrets.PKG_UPLOAD_SECRET }} - name: upload non tags for debug purposes uses: actions/upload-artifact@v3 with: name: release-ui path: dist/ retention-days: 3 release_ui_darwin: runs-on: macos-11 steps: - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} run: echo "flags=--snapshot" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 # It is required for GoReleaser to work properly - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.20" - name: Cache Go modules uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-ui-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-ui-go- - name: Install modules run: go mod tidy - name: Run GoReleaser id: goreleaser uses: goreleaser/goreleaser-action@v4 with: version: ${{ env.GORELEASER_VER }} args: release --config .goreleaser_ui_darwin.yaml --rm-dist ${{ env.flags }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: upload non tags for debug purposes uses: actions/upload-artifact@v3 with: name: release-ui-darwin path: dist/ retention-days: 3 trigger_windows_signer: runs-on: ubuntu-latest needs: [release,release_ui] if: startsWith(github.ref, 'refs/tags/') steps: - name: Trigger Windows binaries sign pipeline uses: benc-uk/workflow-dispatch@v1 with: workflow: Sign windows bin and installer repo: netbirdio/sign-pipelines ref: ${{ env.SIGN_PIPE_VER }} token: ${{ secrets.SIGN_GITHUB_TOKEN }} inputs: '{ "tag": "${{ github.ref }}" }' trigger_darwin_signer: runs-on: ubuntu-latest needs: [release,release_ui_darwin] if: startsWith(github.ref, 'refs/tags/') steps: - name: Trigger Darwin App binaries sign pipeline uses: benc-uk/workflow-dispatch@v1 with: workflow: Sign darwin ui app with dispatch repo: netbirdio/sign-pipelines ref: ${{ env.SIGN_PIPE_VER }} token: ${{ secrets.SIGN_GITHUB_TOKEN }} inputs: '{ "tag": "${{ github.ref }}" }'