From 58ea04ac2d6087ffa90b0bde58de09b706ddfb17 Mon Sep 17 00:00:00 2001 From: Umberto Baldi Date: Tue, 12 Oct 2021 14:56:11 +0200 Subject: [PATCH 1/2] Add CI workflow to publish tester builds On every commit to a pull request or the repository: - Build the project for all supported platforms. - Upload the builds as workflow artifacts. This makes it possible for any interested party to participate in beta testing without setting up a build system locally. --- .github/workflows/publish-go-tester-task.yml | 148 +++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 .github/workflows/publish-go-tester-task.yml diff --git a/.github/workflows/publish-go-tester-task.yml b/.github/workflows/publish-go-tester-task.yml new file mode 100644 index 000000000..38c703347 --- /dev/null +++ b/.github/workflows/publish-go-tester-task.yml @@ -0,0 +1,148 @@ +# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/publish-go-tester-task.md +name: Publish Tester Build + +# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows +on: + create: + push: + paths: + - ".github/workflows/publish-go-tester-task.ya?ml" + - "go.mod" + - "go.sum" + - "Taskfile.ya?ml" + - "DistTasks.ya?ml" + - "**.go" + pull_request: + paths: + - ".github/workflows/publish-go-tester-task.ya?ml" + - "go.mod" + - "go.sum" + - "Taskfile.ya?ml" + - "DistTasks.ya?ml" + - "**.go" + workflow_dispatch: + repository_dispatch: + +env: + GO_VERSION: "1.14" + +jobs: + run-determination: + runs-on: ubuntu-latest + outputs: + result: ${{ steps.determination.outputs.result }} + steps: + - name: Determine if the rest of the workflow should run + id: determination + run: | + RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x" + # The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead. + if [[ \ + "${{ github.event_name }}" != "create" || \ + "${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX \ + ]]; then + # Run the other jobs. + RESULT="true" + else + # There is no need to run the other jobs. + RESULT="false" + fi + + echo "::set-output name=result::$RESULT" + + #this job is heavily customized because the build is quite a bit different from other tooling team projects + build: + needs: run-determination + if: needs.run-determination.outputs.result == 'true' + + #use the strategy instead because we still use the native build + strategy: + matrix: + os: + os: [ubuntu-18.04, windows-2019, macos-10.15] + arch: [-amd64] + include: + - os: windows-2019 + arch: -386 + ext: ".exe" + - os: windows-2019 + ext: ".exe" + + defaults: + run: + shell: bash + + runs-on: ${{ matrix.os }} + + steps: + + - name: Set env vars + run: | + echo $(go env GOPATH)/bin >> $GITHUB_PATH + + - name: Disable EOL conversions + run: git config --global core.autocrlf false + + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + + # dependencies used for compiling the GUI + - name: Install Dependencies (Linux) + run: sudo apt update && sudo apt install -y --no-install-recommends build-essential libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev + if: matrix.os == 'ubuntu-18.04' + + - name: Install Task + uses: arduino/setup-task@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Build the Agent for linux + run: task go:build + if: matrix.os == 'ubuntu-18.04' + + # build the agent without GUI support (no tray icon) + - name: Build the Agent-cli + run: task go:build-cli + if: matrix.os == 'ubuntu-18.04' + + # the manifest is required by windows GUI apps, otherwise the binary will crash with: "Unable to create main window: TTM_ADDTOOL failed" (for reference https://github.com/lxn/walk/issues/28) + # rsrc will produce a *.syso file that should get automatically recognized by go build command and linked into an executable. + - name: Download tool to embed manifest in win binary + run: go get github.com/akavel/rsrc + if: matrix.os == 'windows-2019' + + # building the agent for win requires a different task because of an extra flag + - name: Build the Agent for win32 + env: + GOARCH: 386 # 32bit architecture (for support) + GO386: 387 # support old instruction sets without MMX (used in the Pentium 4) (will be deprecated in GO > 1.15 https://golang.org/doc/go1.15) + run: task go:build-win + if: matrix.os == 'windows-2019' && matrix.arch == '-386' + + - name: Build the Agent for win64 + run: task go:build-win # GOARCH=amd64 by default on the runners + if: matrix.os == 'windows-2019' && matrix.arch == '-amd64' + + - name: Build the Agent for macos + env: + MACOSX_DEPLOYMENT_TARGET: 10.11 # minimum supported version for mac + CGO_CFLAGS: -mmacosx-version-min=10.11 + CGO_LDFLAGS: -mmacosx-version-min=10.11 + run: task go:build + if: matrix.os == 'macos-10.15' + + # config.ini is required by the executable when it's run + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: arduino-create-agent-${{ matrix.os }}${{ matrix.arch }} + path: | + arduino-create-agent* + config.ini + if-no-files-found: error From ac0909c4b6675d533b89be59458b6f1bff629e38 Mon Sep 17 00:00:00 2001 From: Umberto Baldi <34278123+umbynos@users.noreply.github.com> Date: Wed, 13 Oct 2021 09:28:22 +0200 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: per1234 --- .github/workflows/publish-go-tester-task.yml | 34 +++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/.github/workflows/publish-go-tester-task.yml b/.github/workflows/publish-go-tester-task.yml index 38c703347..0fdcc8a98 100644 --- a/.github/workflows/publish-go-tester-task.yml +++ b/.github/workflows/publish-go-tester-task.yml @@ -12,6 +12,9 @@ on: - "Taskfile.ya?ml" - "DistTasks.ya?ml" - "**.go" + - "icon/**" + - "config.ini" + - "manifest.xml" pull_request: paths: - ".github/workflows/publish-go-tester-task.ya?ml" @@ -20,6 +23,9 @@ on: - "Taskfile.ya?ml" - "DistTasks.ya?ml" - "**.go" + - "icon/**" + - "config.ini" + - "manifest.xml" workflow_dispatch: repository_dispatch: @@ -58,15 +64,11 @@ jobs: #use the strategy instead because we still use the native build strategy: matrix: - os: - os: [ubuntu-18.04, windows-2019, macos-10.15] - arch: [-amd64] - include: - - os: windows-2019 - arch: -386 - ext: ".exe" - - os: windows-2019 - ext: ".exe" + os: [ubuntu-18.04, windows-2019, macos-10.15] + arch: [-amd64] + include: + - os: windows-2019 + arch: -386 defaults: run: @@ -94,7 +96,7 @@ jobs: # dependencies used for compiling the GUI - name: Install Dependencies (Linux) run: sudo apt update && sudo apt install -y --no-install-recommends build-essential libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev - if: matrix.os == 'ubuntu-18.04' + if: runner.os == 'Linux' - name: Install Task uses: arduino/setup-task@v1 @@ -104,18 +106,18 @@ jobs: - name: Build the Agent for linux run: task go:build - if: matrix.os == 'ubuntu-18.04' + if: runner.os == 'Linux' # build the agent without GUI support (no tray icon) - name: Build the Agent-cli run: task go:build-cli - if: matrix.os == 'ubuntu-18.04' + if: runner.os == 'Linux' # the manifest is required by windows GUI apps, otherwise the binary will crash with: "Unable to create main window: TTM_ADDTOOL failed" (for reference https://github.com/lxn/walk/issues/28) # rsrc will produce a *.syso file that should get automatically recognized by go build command and linked into an executable. - name: Download tool to embed manifest in win binary run: go get github.com/akavel/rsrc - if: matrix.os == 'windows-2019' + if: runner.os == 'Windows' # building the agent for win requires a different task because of an extra flag - name: Build the Agent for win32 @@ -123,11 +125,11 @@ jobs: GOARCH: 386 # 32bit architecture (for support) GO386: 387 # support old instruction sets without MMX (used in the Pentium 4) (will be deprecated in GO > 1.15 https://golang.org/doc/go1.15) run: task go:build-win - if: matrix.os == 'windows-2019' && matrix.arch == '-386' + if: runner.os == 'Windows' && matrix.arch == '-386' - name: Build the Agent for win64 run: task go:build-win # GOARCH=amd64 by default on the runners - if: matrix.os == 'windows-2019' && matrix.arch == '-amd64' + if: runner.os == 'Windows' && matrix.arch == '-amd64' - name: Build the Agent for macos env: @@ -135,7 +137,7 @@ jobs: CGO_CFLAGS: -mmacosx-version-min=10.11 CGO_LDFLAGS: -mmacosx-version-min=10.11 run: task go:build - if: matrix.os == 'macos-10.15' + if: runner.os == 'macOS' # config.ini is required by the executable when it's run - name: Upload artifacts