Skip to content

Commit

Permalink
.github/workflows: add a new release workflow
Browse files Browse the repository at this point in the history
This creates a new "release" workflow to execute the release of golang.go extension.
(release.yml). The nightly release workflow was moved to release-nightly.yml in
the previous commit.

The new release workflow is triggered when a new tag on the release branch is pushed.

Note: our canonical repository is in go.googlesource.com/vscode-go and tagging
will be done in the canonical repository, and mirrored to the github repository.
A typical workflow will be like

1. A human operator creates a CL to merge the main dev branch to the 'release' branch.
   CI (GCB builder) will test the CL.
2. The CL is reviewed and merged. This triggers the "Long test workflow" (test-long.yml).
3. The human operator verifies the "Long test workflow" is green.
   Otherwise, fix (fix, cherry-pick, review, commit) on the 'release' branch.
4. When the 'release' branch reaches to the state ready for the release,
   the human operator will tag the commig from the canonical repository.
   (https://go-review.googlesource.com/admin/repos/vscode-go,tags)
   Stable versions should be in the format of 'vX.X.X' (e.g. v0.15.0)
   Release candidates should be in the format of 'vX.X.X-rc.X' (e.g. v0.15.0-rc.1)
5. The gopherbot will mirror the tag to the GitHub repo, and that push will trigger
   the 'Release (golang.go)' workflow specified in this file.
     - For stable version release (vX.X.X), check if the package.json has the matching version.
     - Packaging using 'vsce package'
     - Create a release in Github
     - Upload the vsix file as an asset of the release
     - For stable version release (vX.X.X), upload to the vscode market place
       (not implemented in this CL)

And also, prevent workflows from running in forks.

Change-Id: Idb62c63dac064cd1cca8f87eacdfe87c029a49bf
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/239177
Reviewed-by: Rebecca Stambler <[email protected]>
  • Loading branch information
hyangah committed Jun 22, 2020
1 parent 90fc6ea commit f5eb6ed
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 2 deletions.
1 change: 1 addition & 0 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:

jobs:
CodeQL-Build:
if: github.ref == 'refs/heads/master' && github.repository == 'golang/vscode-go'

# CodeQL runs on ubuntu-latest and windows-latest
runs-on: ubuntu-latest
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/release-nightly.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: release
name: Release (golang.go-nightly)

# Daily release on 15:00 UTC, monday-thursday.
# Or, force to release by triggering repository_dispatch events by using
Expand All @@ -11,6 +11,8 @@ on:

jobs:
release:
if: github.ref == 'refs/heads/master' && github.repository == 'golang/vscode-go'

name: Release Nightly
runs-on: ubuntu-latest
timeout-minutes: 20
Expand Down
100 changes: 100 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Release (golang.go)

# The new release workflow is triggered when a new tag on the release
# branch is pushed.
#
# Note: our canonical repository is in go.googlesource.com/vscode-go and tagging
# will be done in the canonical repository, and mirrored to the github repository.
# A typical workflow is:
#
# 1. A human operator creates a CL to merge the main dev branch to the 'release' branch.
# CI (GCB builder) will test the CL.
# 2. The CL is reviewed and merged. This triggers the "Long test workflow" (test-long.yml).
# 3. The human operator verifies the "Long test workflow" is green.
# Otherwise, fix (fix, cherry-pick, review, commit) on the 'release' branch.
# 4. When the 'release' branch reaches to the state ready for the release,
# the human operator will tag the commig from the canonical repository.
# (https://go-review.googlesource.com/admin/repos/vscode-go,tags)
# Stable versions should be in the format of 'vX.X.X' (e.g. v0.15.0)
# Release candidates should be in the format of 'vX.X.X-rc.X' (e.g. v0.15.0-rc.1)
# 5. The gopherbot will mirror the tag to the GitHub repo, and that push will trigger
# the 'Release (golang.go)' workflow specified in this file.
# - For stable version release (vX.X.X), check if the package.json has the matching version.
# - Packaging using 'vsce package'
# - Create a release in Github
# - Upload the vsix file as an asset of the release
# - For stable version release (vX.X.X), upload to the vscode market place
# (not implemented in this CL)

on:
push:
tags:
- v*

jobs:
build:
name: create release
runs-on: ubuntu-latest

steps:
- name: checkout code
uses: actions/checkout@v2

- name: get release version
id: release_version
run: |
TAGGED_VERSION="${GITHUB_REF/refs\/tags\/v/}"
if [[ ! "${TAGGED_VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+.*$ ]]; then
echo "Invalid version tag '${TAGGED_VERSION}'"
exit 1
fi
echo ::set-env name=EXT_VERSION::"${TAGGED_VERSION}"
WRITTEN_VERSION="$(cat package.json | jq '.version' -r)"
if [[ ${TAGGED_VERSION} == *"-"* ]]; then
echo ::set-env name=EXT_ISPREVIEW::1
else
if [[ "${TAGGED_VERSION}" != "${WRITTEN_VERSION}" ]]; then
echo "Release Tag and Version in package.json do not match: '${TAGGED_VERSION}' vs '${WRITTEN_VERSION}'"
exit 1
fi
echo ::set-env name=EXT_ISPREVIEW::0
fi
- name: stamp version
run: |
cat package.json | jq --arg VER "${{ env.EXT_VERSION }}" '.version=$VER' > /tmp/package.json
cp /tmp/package.json ./package.json
npm ci
npm run vscode:prepublish
- name: package
uses: lannonbr/vsce-action@704da577da0f27de5cdb4ae018374c2f08b5f523
with:
args: "package"

- name: create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ env.EXT_VERSION }}
draft: false
prerelease: ${{env.EXT_ISPREVIEW == 1}}

- name: upload release asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./go-${{ env.EXT_VERSION }}.vsix
asset_name: go-${{ env.EXT_VERSION }}.vsix
asset_content_type: application/zip
# TODO: check if the commit is in green state. (test-long.yml results)
# TODO: publish to the market if VERSION is for a stable version.
# TODO: after publishing, create a gerrit CL to update 'latest' branch if VERSION is for a stable version.
2 changes: 1 addition & 1 deletion .github/workflows/test-long.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:

# Not containing 'SKIP CI' in the commit message AND
# (Either non-Windows OR triggered on 'push' (if triggered by 'pull_request', github.base_ref is not empty)
if: "!contains(github.event.head_commit.message, 'SKIP CI')"
if: "github.ref == 'refs/heads/master' && github.repository == 'golang/vscode-go' && !contains(github.event.head_commit.message, 'SKIP CI')"
timeout-minutes: 20
strategy:
fail-fast: false
Expand Down

0 comments on commit f5eb6ed

Please sign in to comment.