Change summary
.github/workflows/build.yml | 34 +++++++++++++++++
.github/workflows/release.yml | 37 +++++++++++++++++++
.goreleaser.yml | 72 +++++++++++++++++++++++++++++++++++++
scripts/release | 43 ++++++++++++++++++++++
scripts/snapshot | 3 +
5 files changed, 189 insertions(+)
Detailed changes
@@ -0,0 +1,34 @@
+name: build
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+
+concurrency: ${{ github.workflow }}-${{ github.ref }}
+
+permissions:
+ contents: write
+ packages: write
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - run: git fetch --force --tags
+
+ - uses: actions/setup-go@v5
+ with:
+ go-version: ">=1.23.2"
+
+ - run: go mod download
+ - uses: goreleaser/goreleaser-action@v6
+ with:
+ distribution: goreleaser
+ version: latest
+ args: build --snapshot --clean
@@ -0,0 +1,37 @@
+name: release
+
+on:
+ workflow_dispatch:
+ push:
+ tags:
+ - "*"
+
+concurrency: ${{ github.workflow }}-${{ github.ref }}
+
+permissions:
+ contents: write
+ packages: write
+
+jobs:
+ goreleaser:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - run: git fetch --force --tags
+
+ - uses: actions/setup-go@v5
+ with:
+ go-version: ">=1.23.2"
+
+ - run: go mod download
+ - uses: goreleaser/goreleaser-action@v6
+ with:
+ distribution: goreleaser
+ version: latest
+ args: release --clean
+ env:
+ GITHUB_TOKEN: ${{ secrets.HOMEBREW_GITHUB_TOKEN }}
+ AUR_KEY: ${{ secrets.AUR_KEY }}
@@ -0,0 +1,72 @@
+version: 2
+project_name: opencode
+before:
+ hooks:
+builds:
+ - env:
+ goos:
+ - linux
+ - darwin
+ main: ./main.go
+
+archives:
+ - format: tar.gz
+ # this name template makes the OS and Arch compatible with the results of uname.
+ name_template: >-
+ opencode-
+ {{- if eq .Os "darwin" }}mac-
+ {{- else if eq .Os "windows" }}windows-
+ {{- else if eq .Os "linux" }}linux-{{end}}
+ {{- if eq .Arch "amd64" }}x86_64
+ {{- else if eq .Arch "#86" }}i386
+ {{- else }}{{ .Arch }}{{ end }}
+ {{- if .Arm }}v{{ .Arm }}{{ end }}
+ # use zip for windows archives
+ format_overrides:
+ - goos: windows
+ format: zip
+checksum:
+ name_template: "checksums.txt"
+snapshot:
+ name_template: "0.0.0-{{ .Timestamp }}"
+aurs:
+ - name: opencode
+ homepage: "https://github.com/opencode-ai/opencode"
+ description: "Deploy anything"
+ maintainers:
+ - "opencode <noreply@opencode.ai>"
+ license: "MIT"
+ private_key: "{{ .Env.AUR_KEY }}"
+ git_url: "ssh://aur@aur.archlinux.org/opencode-bin.git"
+ provides:
+ - opencode
+ conflicts:
+ - opencode
+ package: |-
+ install -Dm755 ./opencode "${pkgdir}/usr/bin/opencode"
+brews:
+ - repository:
+ owner: opencode-ai
+ name: homebrew-tap
+nfpms:
+ - maintainer: opencode
+ description: terminal based agent that can build anything
+ formats:
+ - deb
+ - rpm
+ file_name_template: >-
+ {{ .ProjectName }}-
+ {{- if eq .Os "darwin" }}mac
+ {{- else }}{{ .Os }}{{ end }}-{{ .Arch }}
+
+changelog:
+ sort: asc
+ filters:
+ exclude:
+ - "^docs:"
+ - "^doc:"
+ - "^test:"
+ - "^ci:"
+ - "^ignore:"
+ - "^example:"
+ - "^wip:"
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+# Parse command line arguments
+minor=false
+while [ "$#" -gt 0 ]; do
+ case "$1" in
+ --minor) minor=true; shift 1;;
+ *) echo "Unknown parameter: $1"; exit 1;;
+ esac
+done
+
+git fetch --force --tags
+
+# Get the latest Git tag
+latest_tag=$(git tag --sort=committerdate | grep -E '[0-9]' | tail -1)
+
+# If there is no tag, exit the script
+if [ -z "$latest_tag" ]; then
+ echo "No tags found"
+ exit 1
+fi
+
+echo "Latest tag: $latest_tag"
+
+# Split the tag into major, minor, and patch numbers
+IFS='.' read -ra VERSION <<< "$latest_tag"
+
+if [ "$minor" = true ]; then
+ # Increment the minor version and reset patch to 0
+ minor_number=${VERSION[1]}
+ let "minor_number++"
+ new_version="${VERSION[0]}.$minor_number.0"
+else
+ # Increment the patch version
+ patch_number=${VERSION[2]}
+ let "patch_number++"
+ new_version="${VERSION[0]}.${VERSION[1]}.$patch_number"
+fi
+
+echo "New version: $new_version"
+
+git tag $new_version
+git push --tags
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+set -e
+goreleaser build --clean --snapshot --skip validate