summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Buckley-Houston <tom@tombh.co.uk>2022-07-16 13:57:30 -0400
committerThomas Buckley-Houston <tom@tombh.co.uk>2022-07-16 17:18:39 -0400
commit6ccf2afd07235a1ec65680acedbc1c7ec9df6d7a (patch)
treebbe6f682148b22436f387efe576668b9fefea93a
parentaaea254f0dd1a307036f7ef3e7398da91667b023 (diff)
devops: Refactor CI to use ctl.sh
Also updates our goreleaser setup to work again
-rw-r--r--.github/workflows/build.yml25
-rw-r--r--.github/workflows/lint.yml31
-rw-r--r--.github/workflows/main.yml (renamed from .github/workflows/test.yml)30
-rw-r--r--.github/workflows/release.yml30
-rw-r--r--.travis.yml47
-rw-r--r--goreleaser.yml71
-rw-r--r--interfacer/src/.goreleaser.yml65
-rw-r--r--interfacer/src/browsh/firefox_unix.go1
-rw-r--r--interfacer/src/browsh/firefox_windows.go1
-rw-r--r--scripts/bundling.bash42
-rw-r--r--webext/package.json2
11 files changed, 126 insertions, 219 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index 061faac..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Build browsh
-on: [push]
-jobs:
- build:
- runs-on: ubuntu-latest
- env:
- GOPATH: ${{ github.workspace }}
- GOBIN: ${{ github.workspace }}/bin
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: Setup go
- uses: actions/setup-go@v3
- with:
- go-version: 1.18.x
- - name: Pre-build
- run: ./interfacer/contrib/build_browsh.sh
- - name: Build
- working-directory: ./interfacer
- run: go build ./cmd/browsh
- - name: Test
- run: ./interfacer/browsh --version
-
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000..087a1c1
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,31 @@
+name: Lint
+on: [push]
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ env:
+ GOPATH: ${{ github.workspace }}
+ GOBIN: ${{ github.workspace }}/bin
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Setup go
+ uses: actions/setup-go@v3
+ with:
+ go-version: 1.18.x
+ - name: Setup node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+
+ - run: npm ci
+ working-directory: ./webext
+ - name: Is web extension 'pretty'?
+ run: npm run lint
+ working-directory: ./webext
+
+ - name: Is Golang interfacer formatted?
+ run: ./ctl.sh golang_lint_check
diff --git a/.github/workflows/test.yml b/.github/workflows/main.yml
index 1e118f4..646ca0d 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/main.yml
@@ -1,7 +1,9 @@
-name: Run tests
+name: Test/Release
on: [push]
+
jobs:
- build:
+ test_maybe_release:
+ name: Test (then release if new version)
runs-on: ubuntu-latest
env:
GOPATH: ${{ github.workspace }}
@@ -19,30 +21,25 @@ jobs:
uses: actions/setup-node@v3
with:
node-version: 16
- - name: Install latest Firefox
+ - name: Install Firefox
uses: browser-actions/setup-firefox@latest
with:
firefox-version: 102.0.1 # TODO: Use same version in Dockerfile
- run: firefox --version
# Web extension tests
- # TODO: can these all be shared in a single script?
- run: npm ci
working-directory: ./webext
- name: Web extension tests
run: npm test
working-directory: ./webext
- - run: npm install
- working-directory: ./webext
- - run: npx webpack
+ - run: npm run build_webextension
working-directory: ./webext
# Interfacer tests
- - name: Pre-build
- run: ./interfacer/contrib/build_browsh.sh
- - name: Build # TODO: should this be included in `build_browsh.sh`?
- working-directory: ./interfacer
+ - name: Build
run: go build ./cmd/browsh
+ working-directory: ./interfacer
- name: Unit tests
run: go test -v $(find src/browsh -name '*.go' | grep -v windows)
@@ -52,11 +49,18 @@ jobs:
working-directory: ./interfacer
- name: TTY debug log
if: ${{ failure() }}
- run: cat ./interfacer/test/tty/debug.log
+ run: cat ./interfacer/test/tty/debug.log || echo "No log file"
- name: HTTP Server tests
run: go test test/http-server/*.go -v -ginkgo.slowSpecThreshold=30 -ginkgo.flakeAttempts=3
working-directory: ./interfacer
- name: HTTP Server debug log
if: ${{ failure() }}
- run: cat ./interfacer/test/http-server/debug.log
+ run: cat ./interfacer/test/http-server/debug.log || echo "No log file"
+ # Release
+ - name: Check for new version
+ id: check_versions
+ run: ./ctl.sh github_actions_output_version_status
+ - name: Release
+ if: contains(steps.check_versions.outputs.is_new_version, 'true')
+ run: ./ctl.sh release
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index 4ea358c..0000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-on:
- release:
- types: [created]
-
-jobs:
- releases-matrix:
- name: Release Browsh
- runs-on: ubuntu-latest
- strategy:
- matrix:
- # build and publish in parallel: linux/386, linux/amd64, linux/arm64, windows/386, windows/amd64, darwin/amd64, darwin/arm64
- goos: [linux, windows, darwin]
- goarch: ["386", amd64, arm64]
- exclude:
- - goarch: "386"
- goos: darwin
- - goarch: arm64
- goos: windows
- steps:
- - uses: actions/checkout@v3
- - uses: wangyoucao577/go-release-action@v1.29
- with:
- pre_command: "./interfacer/contrib/build_browsh.sh"
- github_token: ${{ secrets.GITHUB_TOKEN }}
- goos: ${{ matrix.goos }}
- goarch: ${{ matrix.goarch }}
- goversion: 1.18
- project_path: "./interfacer/cmd/browsh"
- binary_name: "browsh"
- extra_files: LICENSE README.md
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 6dc361f..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-if: tag IS blank
-language: go
-go:
- - 1.13.x
-
-addons:
- # Use the full version number with ".0" if needed. This value is scraped by setup scripts.
- firefox: "67.0.1"
- apt:
- packages:
- - rpm
- - bsdtar
- - upx-ucl
-
-env:
- global:
- - REPO_ROOT=$GOPATH/src/browsh
- - MDN_USER="user:13243312:78"
- # MDN_TOKEN
- - secure: "sKZ1/oBLKNWA0v16d4Yg8V500zIwZwEUpcnW7SMRpeqJMbzlR7GKLpJ/VX6ZAYexokBEEbU+JnI3/aHOmJaO9h2/+b1qwrQqje6totC6/rPhxkdxGxI9jETzPdL0V0XErK4rK2URATEANRnJUFLVuFGaXh6dUZDrbtn8NxDSfZEQGmHlqex5TcqPxmK2v0Lb3l2FcVF2kxGYpKMmjKFQbGBHdjFN5qOrS3jmkHjC6Ie8CaM9ezy55e3sOIrNr/u4kWJAOGE2cT3rjqcmPYaCRRzkiy7q3sYEI6jC9vfOZeyFI6E0e3VPDv+OGq+lnUBbgVjGhiG9LxIJ9Z3JEY9z5OspeczpLiQT2rhstqwDolyhx2liiI9cZe0d+uiLo2YyYKe1RELlClB6cQi9p/J8vJpyVEutIoq8Sdv13vbnJMAmPQi1OD9qtOgBR9cngy5yWIPyizgpcAr6kCYxztwIX4y1wrlHPUdTApDnfJNkNOSBwYBTigmlFZf8BkGXB4JOhcQ8KZM3H2OdOP2rANZIOd1ficgyHgKNt4iomIC/i5d7qnV6OZfzirQgx7yzWqjwoGrPg+OvL9MeY9dMltGsfFL80FLudIzN8sqj3BUYioXWX8GCyVML/XoMPbLpcSLBRMxskUhNSYbaTQ2qML7H5Kv/wce71BXMknzyT0s/mNs="
- # GITHUB_TOKEN
- - secure: "boYctu4EQI2og3YWpD54yo1LzibgBNrYN3exbfwxaNNbJuQscprAlOOG5Y1O7MBgzG9AP1DeON3X0al7g/IYMrsMsrSGhJLq9w2/ntwMiUIyKfTAP8rB5fASRSYxA5mqhpjXK4iIzqG2xiOr1SmCbpT9ew0AXP/HgxQprsppBbH+H4HyrP4cejIbfk8ajU/XvrDmhOY4s/IZIy+vfEfZH5xheJnG3iWFICwWUF5CIjjr6fQpq9ZbL2sDMvzruYPMAQ3iDfBrUr+ZhN4PPjrzvCRUNpoUoPsXCsFDPMcZpBjSHH5ZELPRBzHSdJignIjHaV0UtLtFApZl49lzq749r2Sno2ba4JCd0RIgMERjNluXynkJiHrL2tMR8HYhOmoeLMdX0zrguv+136+Jn04gQde3S+FI1/sN0/Xa14xD7SGMUT1MgFnwKgFXOFeUd3VpvbpFg6RWVgpCnaDd2/AKL+mQDEgL4yRg9q95a6Q5ub/c6nla8/E4asEvYGlJPj0OG/MKvJMi0gnKuP4+nil0jgGeKki3k1UxwvldlS+n7HUhQ7c4B9c61KS19i+z5SxBiXjilL+zGlAVVgRcalIoKQrTRDSRKnKZkR5Ant0CLjt44pncHLwlYXD/aPuLNihCa4AqUlpYPYru0pQawXNkVnk6E/cg2DAsp7oDcpcg540="
-
-before_install:
- - ./interfacer/contrib/setup_dep.sh
- - ./webext/contrib/setup_node.sh
- - mkdir -p $REPO_ROOT && cp -rfp $TRAVIS_BUILD_DIR -T $REPO_ROOT
-install:
- - cd $REPO_ROOT/interfacer && dep ensure
- - cd $REPO_ROOT/webext
- - source ~/.nvm/nvm.sh
- - npm run get-gobindata
- - npm install
- - npm run build
- - diff -u <(echo -n) <(gofmt -d ./)
- - ./node_modules/.bin/prettier --list-different "{src,test}/**/*.js"
-script:
- - cd $REPO_ROOT/webext && npm test
- - cd $REPO_ROOT/interfacer && go test $(find src/browsh -name *.go | grep -v windows)
- - cd $REPO_ROOT/interfacer && go test test/tty/*.go -v -ginkgo.slowSpecThreshold=30 -ginkgo.flakeAttempts=3
- - cd $REPO_ROOT/interfacer && go test test/http-server/*.go -v -ginkgo.slowSpecThreshold=30 -ginkgo.flakeAttempts=3
-after_failure:
- - cat $REPO_ROOT/interfacer/test/tty/debug.log
- - cat $REPO_ROOT/interfacer/test/http-server/debug.log
-after_success:
- - $REPO_ROOT/contrib/release_if_new_version.sh
-
diff --git a/goreleaser.yml b/goreleaser.yml
new file mode 100644
index 0000000..9e6b865
--- /dev/null
+++ b/goreleaser.yml
@@ -0,0 +1,71 @@
+# Run with `ctl.sh release` to get ENV vars
+
+project_name: browsh
+builds:
+ - binary: browsh
+ env:
+ - CGO_ENABLED=0
+ main: cmd/browsh/main.go
+ goos:
+ - windows
+ - darwin
+ - linux
+ - freebsd
+ - openbsd
+ goarch:
+ - 386
+ - amd64
+ - arm
+ - arm64
+ goarm:
+ - 6
+ - 7
+ ignore:
+ - goos: darwin
+ goarch: 386
+ - goarch: arm64
+ goos: windows
+ ldflags: -s -w
+
+archives:
+ - format_overrides:
+ - goos: windows
+ format: binary
+ - goos: linux
+ format: binary
+ - goos: freebsd
+ format: binary
+ - goos: openbsd
+ format: binary
+
+nfpms:
+ - vendor: Browsh
+ homepage: https://www.brow.sh
+ maintainer: Thomas Buckley-Houston <tom@tombh.co.uk>
+ description: The modern, text-based browser
+ license: GPL v3
+ formats:
+ - deb
+ - rpm
+ dependencies:
+ - firefox
+ overrides:
+ deb:
+ dependencies:
+ - 'firefox | firefox-esr'
+
+brews:
+ - name: browsh
+ tap:
+ owner: browsh-org
+ name: homebrew-browsh
+ commit_author:
+ name: Goreleaser Bot care of Github Actions
+ email: ci@github.com
+ homepage: "https://www.brow.sh"
+ description: "The modern, text-based browser"
+ caveats: "You need Firefox 57 or newer to run Browsh"
+
+release:
+ extra_files:
+ - glob: ./webext/dist/web-ext-artifacts/browsh-{{ Env.BROWSH_VERSION }}-an+fx.xpi
diff --git a/interfacer/src/.goreleaser.yml b/interfacer/src/.goreleaser.yml
deleted file mode 100644
index f6bdd64..0000000
--- a/interfacer/src/.goreleaser.yml
+++ /dev/null
@@ -1,65 +0,0 @@
-project_name: browsh
-builds:
- - main: .
- binary: browsh
- goos:
- - windows
- - darwin
- - linux
- - freebsd
- - openbsd
- goarch:
- - 386
- - amd64
- - arm
- - arm64
- goarm:
- - 6
- - 7
- ldflags: -s -w
-
-archive:
- format_overrides:
- - goos: windows
- format: binary
- - goos: linux
- format: binary
- - goos: freebsd
- format: binary
- - goos: openbsd
- format: binary
-
-nfpm:
- vendor: Browsh
- homepage: https://www.brow.sh
- maintainer: Thomas Buckley-Houston <tom@tombh.co.uk>
- description: The modern, text-based browser
- license: GPL v3
- formats:
- - deb
- - rpm
-
- dependencies:
- - firefox
- overrides:
- deb:
- dependencies:
- - 'firefox | firefox-esr'
-
-brew:
- name: browsh
-
- # Repository to push the tap to.
- github:
- owner: browsh-org
- name: homebrew-browsh
-
- commit_author:
- name: Goreleaser Bot care of Travis CI
- email: builds@travis-ci.com
-
- homepage: "https://www.brow.sh"
-
- description: "The modern, text-based browser"
-
- caveats: "You need Firefox 57 or newer to run Browsh"
diff --git a/interfacer/src/browsh/firefox_unix.go b/interfacer/src/browsh/firefox_unix.go
index 8048be8..57f6ea6 100644
--- a/interfacer/src/browsh/firefox_unix.go
+++ b/interfacer/src/browsh/firefox_unix.go
@@ -1,5 +1,4 @@
//go:build darwin || dragonfly || freebsd || linux || nacl || netbsd || openbsd || solaris
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
package browsh
diff --git a/interfacer/src/browsh/firefox_windows.go b/interfacer/src/browsh/firefox_windows.go
index 4d372b7..17394f7 100644
--- a/interfacer/src/browsh/firefox_windows.go
+++ b/interfacer/src/browsh/firefox_windows.go
@@ -1,5 +1,4 @@
//go:build windows
-// +build windows
package browsh
diff --git a/scripts/bundling.bash b/scripts/bundling.bash
index 4e275cc..eb3c538 100644
--- a/scripts/bundling.bash
+++ b/scripts/bundling.bash
@@ -1,30 +1,5 @@
#!/usr/bin/env bash
-export WEBEXTENSION_GO=$PROJECT_ROOT/interfacer/src/browsh/webextension.go
-export GOBINDATA_VERSION=3.23.0
-
-# Convert the web extension into binary data that can be compiled into a
-# cross-platform Go binary.
-function xpi_to_bin() {
- local xpi_file=$1
- local bin_file=$2
-
- if ! command -v go-bindata &>/dev/null; then
- echo "Installing \`go-bindata'..."
- go install github.com/kevinburke/go-bindata/go-bindata@v"$GOBINDATA_VERSION"
- go-bindata -version
- fi
-
- go-bindata \
- -nocompress \
- -prefix "$PROJECT_ROOT/interfacer" \
- -pkg browsh \
- -o "$bin_file" \
- "$xpi_file"
-
- ls -alh "$WEBEXTENSION_GO"
-}
-
function build_webextension() {
local NODE_BIN=$PROJECT_ROOT/webext/node_modules/.bin
@@ -38,17 +13,16 @@ function build_webextension() {
"$NODE_BIN"/web-ext build --overwrite-dest
ls -alh web-ext-artifacts
- version=$("$PROJECT_ROOT"/ctl.sh browsh_version)
+ version=$(browsh_version)
- local xpi_file=browsh-$version-an+fx.xpi
- local zip_file=browsh-$version.zip
+ local source_file
local source_dir=$PROJECT_ROOT/webext/dist/web-ext-artifacts
+ local bundle_file=$PROJECT_ROOT/interfacer/src/browsh/browsh.xpi
if [ "$BROWSH_ENV" == "RELEASE" ]; then
# The signed version. There can only be one canonical XPI for each semantic
# version.
- source_file=$source_dir/$xpi_file
- bundle_file=$PROJECT_ROOT/interfacer/browsh.xpi
+ source_file="$source_dir/browsh-$version-an+fx.xpi"
"$NODE_BIN"/web-ext sign --api-key "$MDN_USER" --api-secret "$MDN_KEY"
else
# TODO: This doesn't currently work with the Marionettte `tempAddon`
@@ -58,13 +32,11 @@ function build_webextension() {
# by `Asset()` in `main.go`.
# In development/testing, we want to be able to bundle the webextension
# frequently without having to resort to version bumps.
- source_file=$source_dir/$zip_file
- bundle_file=$source_dir/browsh.zip
+ source_file="$source_dir/browsh-$version.zip"
fi
+ echo "Bundling $source_file to $bundle_file"
cp -f "$source_file" "$bundle_file"
- echo "Bundling $source_file to $WEBEXTENSION_GO using internal path $bundle_file"
- xpi2bin "$bundle_file" "$WEBEXTENSION_GO"
}
function bundle_production_webextension() {
@@ -73,6 +45,4 @@ function bundle_production_webextension() {
local release_url="$base/v$version/browsh-$version-an.fx.xpi"
local xpi_file=$PROJECT_ROOT/interfacer/src/browsh/browsh.xpi
curl -L -o "$xpi_file" "$release_url"
-
- xpi2bin "$xpi_file" "$WEBEXTENSION_GO"
}
diff --git a/webext/package.json b/webext/package.json
index 91fbacb..d71e282 100644
--- a/webext/package.json
+++ b/webext/package.json
@@ -1,7 +1,7 @@
{
"scripts": {
"build_webextension": "../ctl.sh build_webextension",
- "lint": "prettier --list-different "{src,test}/**/*.js",
+ "lint": "prettier --list-different '{src,test}/**/*.js'",
"test": "NODE_PATH=src:test mocha"
},
"babel": {