This small post will run you through how to setup Github actions to run tests for Go code targeting WebAssembly.
OK, take me straight to the complete setup!
Here is the most basic configuration suggested by Github for Go repositories:
name: Go
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Build
run: go build -v ./...
- name: Test
run: go test -v ./...
The first thing we need is to tell the go
command we want to target WebAssembly, which can be done declaring the GOOS
and GOARCH
variables on the job:
jobs:
build:
runs-on: ubuntu-latest
env:
GOOS: js
GOARCH: wasm
The "Build" step should now work as expected, checking that our code compiles to WebAssembly.
However for the "Test" step to work, we need some more configuration.
Of course we need an execution environment for our compiled WebAssembly, in our case Node.js will be perfect, so let's set it up in addition of Go:
- name: Set up Node.js
uses: actions/setup-node@v2.4.0
with:
node-version: 14
And finally we need to add go_js_wasm_exec
to our PATH
to enable go test
running our tests using Node.js.
go_js_wasm_exec
is located in the misc/wasm
directory of the Go installation, we can add it to the PATH
with a simple step:
- name: Setup PATH for wasm
run: echo "${{env.GOROOT}}/misc/wasm" >> $GITHUB_PATH
Complete setup
name: Go
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
env:
GOOS: js
GOARCH: wasm
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Setup PATH for wasm
run: echo "${{env.GOROOT}}/misc/wasm" >> $GITHUB_PATH
- name: Set up Node.js
uses: actions/setup-node@v2.4.0
with:
node-version: 14
- name: Build
run: go build -v ./...
- name: Test
run: go test -v ./...
This setup is based on the instructions in the Go WebAssembly wiki page, it can be adapted to run tests in a browser.
Top comments (0)