mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 18:11:48 +00:00
We have nice release names in https://github.com/sourcegraph/sg/releases, but it's not actually programmatically available - this causes a discrepancy between the `sg` version one might pull, and the version of `sg` that is known in-code, and means that we can't do something like #62134.
This change adds a `ReleaseName` variable to be stamped at build/release time, and updates a few references to `BuildCommit` where I think it might be more prudent to report `ReleaseName` instead, and also fixes some yellow squiggles in my IDE on files I visited (sorry) and some noisy `-v` output (sorry again)
## Test plan
```
$ go build -ldflags "-s -w -X main.BuildCommit=$(git rev-list -1 HEAD .) -X main.ReleaseName=hello-world" -o ./sg ./dev/sg
$ ./sg version
hello-world
$ ./sg -v version
Version: hello-world
Build commit: b23db0be5e
```
146 lines
4.9 KiB
YAML
146 lines
4.9 KiB
YAML
name: sg-binary-release
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
# Core sg code
|
|
- 'dev/sg/**'
|
|
- '.github/workflows/sg-binary-release.yml'
|
|
# Core sg dependencies
|
|
- 'lib/output/**'
|
|
- 'lib/errors/**'
|
|
- 'lib/group/**'
|
|
# Important things sg imports
|
|
- 'dev/ci/images/**' # sg ops
|
|
- 'internal/database/migration/**' # sg migration
|
|
- 'monitoring/**' # sg monitoring
|
|
- 'dev/managedservicesplatform/**' # sg msp
|
|
# manual release
|
|
workflow_dispatch: {}
|
|
|
|
env:
|
|
GOFLAGS: -trimpath
|
|
CGO_ENABLED: '1'
|
|
|
|
jobs:
|
|
touch_sg:
|
|
if: github.repository == 'sourcegraph/sourcegraph'
|
|
name: Touch sourcegraph/sg
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: checkout-sourcegraph-sg
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: sourcegraph/sg
|
|
token: ${{ secrets.SG_RELEASE_TOKEN }}
|
|
- name: touch-sourcegraph-sg
|
|
run: |
|
|
today=$(date +'%Y-%m-%d-%H-%M')
|
|
sed -i 's/Latest release: .*/Latest release: '"$today"'/' README.md
|
|
git config user.name github-actions
|
|
git config user.email github-actions@github.com
|
|
git add README.md
|
|
git commit -m "Update to latest release"
|
|
git push
|
|
|
|
create_release:
|
|
name: create-github-release
|
|
needs: touch_sg
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
release_name: ${{ steps.release.outputs.release_name }}
|
|
steps:
|
|
- name: create-github-release
|
|
id: release
|
|
run: |
|
|
today=$(date +'%Y-%m-%d-%H-%M')
|
|
short_sha=$(echo ${{ github.sha }} | cut -c1-8)
|
|
|
|
# ATTENTION: release_name is a duplicate from the last step in this
|
|
# file, because I can't get workflow outputs to work. If you change
|
|
# one, make sure you change the other.
|
|
release_name="${today}-${short_sha}"
|
|
|
|
echo "### sg snapshot release" >> /tmp/release-notes.md
|
|
echo "" >> /tmp/release-notes.md
|
|
echo "Commit: https://github.com/sourcegraph/sourcegraph/commit/${{github.sha}}" >> /tmp/release-notes.md
|
|
|
|
gh release delete -R="${repo}" ${release_name} || true
|
|
gh release create -R="${repo}" ${release_name} --notes-file /tmp/release-notes.md
|
|
|
|
echo "::set-output name=release_name::${release_name}"
|
|
env:
|
|
repo: sourcegraph/sg
|
|
GITHUB_TOKEN: ${{ secrets.SG_RELEASE_TOKEN }}
|
|
|
|
build:
|
|
name: build
|
|
needs: [create_release]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- macos-latest
|
|
arch:
|
|
- amd64
|
|
- arm64
|
|
exclude:
|
|
# Compiling for arm64 on Linux requires more work
|
|
- os: ubuntu-latest
|
|
arch: arm64
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Go
|
|
uses: actions/setup-go@v4
|
|
with: { go-version: '1.22' }
|
|
|
|
- name: Build and upload macOS
|
|
if: startsWith(matrix.os, 'macos-') == true
|
|
run: |
|
|
cd dev/sg
|
|
GOARCH=${{ matrix.arch }} go build -o "sg_$(go env GOOS)_${{ matrix.arch }}" -trimpath \
|
|
-ldflags "-s -w -X main.BuildCommit=$(git rev-list -1 HEAD .) -X main.ReleaseName=${{ needs.create_release.outputs.release_name }}" .
|
|
|
|
- name: Build and upload Linux
|
|
if: startsWith(matrix.os, 'ubuntu-') == true
|
|
run: |
|
|
cd dev/sg
|
|
GOARCH=${{ matrix.arch }} go build -o "sg_$(go env GOOS)_${{ matrix.arch }}" -trimpath \
|
|
-ldflags "-s -w -X main.BuildCommit=$(git rev-list -1 HEAD .) -X main.ReleaseName=${{ needs.create_release.outputs.release_name }}" .
|
|
|
|
# On certain CI agents, the glibc might not be the right one, so we build a static variant
|
|
CGO_ENABLED=0 GOARCH=${{ matrix.arch }} go build -o "sg_$(go env GOOS)_${{ matrix.arch }}_static" -trimpath \
|
|
-ldflags "-s -w -X main.BuildCommit=$(git rev-list -1 HEAD .) -X main.ReleaseName=${{ needs.create_release.outputs.release_name }}" .
|
|
|
|
- name: Upload release asset
|
|
run: |
|
|
cd dev/sg
|
|
release_name="${{ needs.create_release.outputs.release_name }}"
|
|
gh release upload -R="${repo}" ${release_name} "sg_$(go env GOOS)_${{ matrix.arch }}"
|
|
env:
|
|
repo: sourcegraph/sg
|
|
GITHUB_TOKEN: ${{ secrets.SG_RELEASE_TOKEN }}
|
|
|
|
- name: Upload release asset (linux-amd64-static)
|
|
if: startswith(matrix.os, 'ubuntu-') == true
|
|
run: |
|
|
cd dev/sg
|
|
release_name="${{ needs.create_release.outputs.release_name }}"
|
|
gh release upload -R="${repo}" ${release_name} "sg_$(go env GOOS)_${{ matrix.arch }}_static"
|
|
env:
|
|
repo: sourcegraph/sg
|
|
GITHUB_TOKEN: ${{ secrets.SG_RELEASE_TOKEN }}
|
|
|
|
report_failure:
|
|
needs: build
|
|
if: ${{ failure() }}
|
|
uses: sourcegraph/sourcegraph/.github/workflows/report-job-failure.yml@main
|
|
secrets: inherit
|