Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add versioning and release with changesets #361

Open
wants to merge 13 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/README.md
@@ -0,0 +1,8 @@
# Changesets

Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)

We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
11 changes: 11 additions & 0 deletions .changeset/config.json
@@ -0,0 +1,11 @@
{
"$schema": "https://unpkg.com/@changesets/config@2.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
49 changes: 49 additions & 0 deletions .github/workflows/changesets.yml
@@ -0,0 +1,49 @@
name: Changesets

on:
push:
branches:
- main

jobs:
changesets:
name: Changesets
runs-on: ubuntu-latest
steps:
# Checkout this repository
- name: Checkout Repo
uses: actions/checkout@f25a3a9f25bd5f4c5d77189cab02ff357b5aedeb # v2.4.1
with:
# This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits
fetch-depth: 0
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
# Get tool versions
- name: Get tool versions
uses: smartcontractkit/tool-versions-to-env-action@v1.0.7
id: tool-versions
# Install nix
- name: Install Nix
uses: cachix/install-nix-action@v14
with:
install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install
install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve'
extra_nix_config: |
experimental-features = nix-command flakes
access-tokens = github.com=${{ secrets.PERSONAL_ACCESS_TOKEN }}
# Set up Node.js
- name: Setup Node.js ${{ steps.tool-versions.outputs.nodejs_version }}
uses: actions/setup-node@master
with:
node-version: ${{ steps.tool-versions.outputs.nodejs_version }}
# Install dependencies using yarn
- name: Install Dependencies
run: nix develop -c yarn install --frozen-lockfile
# Create PR that will update versions or trigger publish
- name: Create Release Pull Request
uses: changesets/action@master
id: changesets
with:
publish: nix develop -c yarn release
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/golangci-lint.yml
Expand Up @@ -23,7 +23,7 @@ jobs:
version: v${{ steps.tool-versions.outputs.golangci-lint_version }}

# Optional: working directory, useful for monorepos
# working-directory: somedir
working-directory: relayer

# Optional: golangci-lint command line arguments.
args: --enable=gofmt --tests=false --exclude-use-default --timeout=5m0s
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/relay.yml
Expand Up @@ -19,8 +19,8 @@ jobs:
- name: Install Solana CLI
run: ./scripts/install-solana-ci.sh
- name: Build
run: go build -v ./pkg/...
run: cd ./relayer && go build -v ./pkg/...
- name: Test
run: go test ./pkg/... -v
run: cd ./relayer && go test ./pkg/... -v
- name: Test with the race detector enabled
run: go test ./pkg/... -v -race -count=10
run: cd ./relayer && go test ./pkg/... -v -race -count=10
52 changes: 52 additions & 0 deletions .github/workflows/release/solana-gauntlet-cli.yml
@@ -0,0 +1,52 @@
name: Solana Gauntlet CLI Release

on:
push:
tags:
- "@chainlink/solana-gauntlet-contracts@[0-9]+.[0-9]+.[0-9]"

jobs:
solana-gauntlet-cli-release:
name: Solana Gauntlet CLI Release
runs-on: ubuntu-latest
steps:
# Checkout this repository
- name: Checkout Repo
uses: actions/checkout@f25a3a9f25bd5f4c5d77189cab02ff357b5aedeb # v2.4.1
# Get tool versions
- name: Get tool versions
uses: smartcontractkit/tool-versions-to-env-action@v1.0.7
id: tool-versions
# Install nix
- name: Install Nix
uses: cachix/install-nix-action@v14
with:
install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install
install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve'
extra_nix_config: |
experimental-features = nix-command flakes
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
# Set up Node.js
- name: Setup Node.js ${{ steps.tool-versions.outputs.nodejs_version }}
uses: actions/setup-node@master
with:
node-version: ${{ steps.tool-versions.outputs.nodejs_version }}
# Build Gauntlet
- name: Build Gauntlet
run: |
cd gauntlet
nix develop -c yarn install --frozen-lockfile
nix develop -c yarn bundle
# Store gauntlet-cli version
- name: Set Env Variables
run: echo "SOLANA_GAUNTLET_CLI=$(npm info @chainlink/solana-gauntlet-contracts version)" >> $GITHUB_ENV
# Upload gauntlet binary to gauntlet-cli release
- name: Upload Gauntlet Binary
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: gauntlet/bin/gauntlet-*
file_glob: true
tag: |
@chainlink/solana-gauntlet-contracts@${{ env.solana_GAUNTLET_CLI }}
overwrite: false
24 changes: 24 additions & 0 deletions .github/workflows/release/solana-relayer.yml
@@ -0,0 +1,24 @@
name: Solana Relayer Release

on:
push:
tags:
- "@chainlink/solana-relayer@[0-9]+.[0-9]+.[0-9]"

jobs:
solana-relayer-release:
name: Release Solana Relayer
runs-on: ubuntu-latest
steps:
# Checkout this repository
- name: Checkout Repo
uses: actions/checkout@f25a3a9f25bd5f4c5d77189cab02ff357b5aedeb # v2.4.1
# Store solana version
- name: Set Env Variables
run: echo "SOLANA_RELAYER=$(npm info @chainlink/solana-relayer version)" >> $GITHUB_ENV
# Release code under vX.X.X
- name: Release Code
uses: softprops/action-gh-release@v1
with:
tag_name: relayer/v${{ env.SOLANA_RELAYER }}
token: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .gitignore
Expand Up @@ -5,7 +5,7 @@
.vscode/

# ignore relay build
pkg/bin
relayer/pkg/bin

v1/target

Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
@@ -0,0 +1,18 @@
# Changelog Index

This repository adheres to [Semantic Versioning](http://semver.org/).

Chainlink-Solana contains a number of projects, all individually versioned and released. Please consult the following changelogs for more information:

- [@chainlink/solana-relayer](/relayer/)
- [@chainlink/solana-ops](/ops/)
- [@chainlink/solana-integration-tests](/tests/)
- [@chainlink/solana-gauntlet](/gauntlet/packages/gauntlet-solana/)
- [@chainlink/gauntlet-serum-multisig](/gauntlet/packages/gauntlet-serum-multisig/)
- [@chainlink/solana-gauntlet-contracts](/gauntlet/packages/gauntlet-solana-contracts/)
- [@chainlink/solana-sdk](/ts/)
- [@chainlink/solana-contracts](/contracts/)

If a project is pre-v1.0, minor version bumps may cause breaking changes. All breaking changes are noted in changelogs.

Official project releases can be found here: https://github.com/smartcontractkit/chainlink-solana/releases
41 changes: 41 additions & 0 deletions CONTRIBUTING.md
@@ -0,0 +1,41 @@
🎈 Thanks for your help improving the project! We are so happy to have you!

## Workflow for Pull Requests

🚨 Before making any non-trivial change, please first open an issue describing the change to solicit feedback and guidance. This will increase the likelihood of the PR getting merged.

In general, the smaller the diff the easier it will be for us to review quickly.

In order to contribute, fork the appropriate branch, for non-breaking changes to production that is `develop` and for the next release that is normally `release/X.X.X` branch.

Additionally, if you are writing a new feature, please ensure you add appropriate test cases.

Follow the [Getting Started](./docs/getting-started.md) guide to set up your local development environment.

We recommend using the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format on commit messages.

Unless your PR is ready for immediate review and merging, please mark it as 'draft' (or simply do not open a PR yet).

**Bonus:** Add comments to the diff under the "Files Changed" tab on the PR page to clarify any sections where you think we might have questions about the approach taken.

### Response time:

We aim to provide a meaningful response to all PRs and issues from external contributors within 5 business days.

### Changesets

We use [changesets](https://github.com/atlassian/changesets) to manage releases of our various packages.
You _must_ include a `changeset` file in your PR when making a change that would require a new package release.

Adding a `changeset` file is easy:

1. Navigate to the root of the monorepo.
2. Run `yarn changeset`. You'll be prompted to select packages to include in the changeset. Use the arrow keys to move the cursor up and down, hit the `spacebar` to select a package, and hit `enter` to confirm your selection. Select _all_ packages that require a new release as a result of your PR.
3. Once you hit `enter` you'll be prompted to decide whether your selected packages need a `major`, `minor`, or `patch` release. We follow the [Semantic Versioning](https://semver.org/) scheme. Please avoid using `major` releases for any packages that are still in version `0.y.z`.
4. Commit your changeset and push it into your PR. The changeset bot will notice your changeset file and leave a little comment to this effect on GitHub.

### Rebasing

We use the `git rebase` command to keep our commit history tidy.
Rebasing is an easy way to make sure that each PR includes a series of clean commits with descriptive commit messages
See [this tutorial](https://docs.gitlab.com/ee/topics/git/git_rebase.html) for a detailed explanation of `git rebase` and how you should use it to maintain a clean commit history.
3 changes: 1 addition & 2 deletions Makefile
Expand Up @@ -71,8 +71,7 @@ build_local: build_js build_contracts_local cp_gauntlet_idl
build_staging: build_js build_contracts_staging cp_gauntlet_idl

test_relay_unit:
go build -v ./pkg/...
go test -v ./pkg/...
cd relayer && go build -v ./pkg/... && go test -v ./pkg/...

test_smoke:
SELECTED_NETWORKS=solana NETWORK_SETTINGS=$(shell pwd)/tests/e2e/networks.yaml \
Expand Down
2 changes: 1 addition & 1 deletion cmd/monitoring/main.go
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/smartcontractkit/chainlink-relay/pkg/logger"
relayMonitoring "github.com/smartcontractkit/chainlink-relay/pkg/monitoring"

"github.com/smartcontractkit/chainlink-solana/pkg/monitoring"
"github.com/smartcontractkit/chainlink-solana/relayer/pkg/monitoring"
)

func main() {
Expand Down
4 changes: 3 additions & 1 deletion contracts/package.json
@@ -1,6 +1,8 @@
{
"name": "@chainlink/solana-contracts",
"version": "0.0.1",
"dependencies": {
"@chainlink/solana-sdk": "../ts",
"@chainlink/solana-sdk": "*",
"@project-serum/anchor": "^0.23.0",
"@solana/spl-token": "^0.1.8",
"@solana/web3.js": "1.31.0",
Expand Down
2 changes: 1 addition & 1 deletion docs/gauntlet/gauntlet-setup.md
@@ -1,4 +1,4 @@
# Gauntlet Solana
# Solana Gauntlet

Install node version with asdf. Which can be done by running this from the base of the chainlink-solana repository:

Expand Down
2 changes: 1 addition & 1 deletion gauntlet/README.md
@@ -1,3 +1,3 @@
# Gauntlet Solana
# Solana Gauntlet

For more information, see the [Chainlink Solana Documentation](./docs/gauntlet).
4 changes: 2 additions & 2 deletions gauntlet/jest.config.js
Expand Up @@ -2,7 +2,7 @@ module.exports = {
rootDir: '.',
projects: [
{
displayName: 'gauntlet-solana',
displayName: 'solana-gauntlet',
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['<rootDir>/packages/gauntlet-solana/**/*.test.ts'],
Expand All @@ -13,7 +13,7 @@ module.exports = {
},
},
{
displayName: 'gauntlet-solana-contracts',
displayName: 'solana-gauntlet-contracts',
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['<rootDir>/packages/gauntlet-solana-contracts/**/*.test.ts'],
Expand Down
2 changes: 1 addition & 1 deletion gauntlet/package.json
Expand Up @@ -2,7 +2,7 @@
"name": "gauntlet",
"private": true,
"version": "0.0.1",
"description": "Gauntlet Solana",
"description": "Solana Gauntlet",
"workspaces": [
"packages/*"
],
Expand Down
2 changes: 1 addition & 1 deletion gauntlet/packages/gauntlet-serum-multisig/package.json
Expand Up @@ -26,7 +26,7 @@
},
"dependencies": {
"@chainlink/gauntlet-core": "0.1.2",
"@chainlink/gauntlet-solana": "*",
"@chainlink/solana-gauntlet": "*",
"@project-serum/anchor": "^0.23.0",
"@solana/web3.js": "^1.31.0"
}
Expand Down
@@ -1,6 +1,6 @@
import { Result } from '@chainlink/gauntlet-core'
import { logger, BN, prompt } from '@chainlink/gauntlet-core/dist/utils'
import { SolanaCommand, TransactionResponse, contracts } from '@chainlink/gauntlet-solana'
import { SolanaCommand, TransactionResponse, contracts } from '@chainlink/solana-gauntlet'
import { PublicKey, SYSVAR_RENT_PUBKEY, Keypair } from '@solana/web3.js'
import { CONTRACT_LIST, getContract } from '../lib/contracts'

Expand Down
@@ -1,6 +1,6 @@
import { Result } from '@chainlink/gauntlet-core'
import { logger } from '@chainlink/gauntlet-core/dist/utils'
import { SolanaCommand, TransactionResponse } from '@chainlink/gauntlet-solana'
import { SolanaCommand, TransactionResponse } from '@chainlink/solana-gauntlet'
import { PublicKey } from '@solana/web3.js'
import { CONTRACT_LIST, getContract } from '../lib/contracts'

Expand Down
@@ -1,4 +1,4 @@
import { SolanaCommand, utils } from '@chainlink/gauntlet-solana'
import { SolanaCommand, utils } from '@chainlink/solana-gauntlet'
import { logger, BN, prompt } from '@chainlink/gauntlet-core/dist/utils'
import { PublicKey, Keypair, TransactionInstruction, SystemProgram, AccountMeta } from '@solana/web3.js'
import { Idl, Program } from '@project-serum/anchor'
Expand Down
@@ -1,4 +1,4 @@
import { SolanaCommand, TransactionResponse } from '@chainlink/gauntlet-solana'
import { SolanaCommand, TransactionResponse } from '@chainlink/solana-gauntlet'
import { PublicKey } from '@solana/web3.js'
import { Result } from '@chainlink/gauntlet-core'
import { logger } from '@chainlink/gauntlet-core/dist/utils'
Expand Down
@@ -1,4 +1,4 @@
import { SolanaCommand, TransactionResponse, contracts } from '@chainlink/gauntlet-solana'
import { SolanaCommand, TransactionResponse, contracts } from '@chainlink/solana-gauntlet'
import { PublicKey } from '@solana/web3.js'
import { Result } from '@chainlink/gauntlet-core'
import { BN, logger } from '@chainlink/gauntlet-core/dist/utils'
Expand Down
@@ -1,4 +1,4 @@
import { contracts } from '@chainlink/gauntlet-solana'
import { contracts } from '@chainlink/solana-gauntlet'
import { join } from 'path'

export enum CONTRACT_LIST {
Expand Down
2 changes: 1 addition & 1 deletion gauntlet/packages/gauntlet-solana-contracts/README.md
@@ -1,4 +1,4 @@
# gauntlet-solana
# solana-gauntlet

### Prepare

Expand Down
6 changes: 3 additions & 3 deletions gauntlet/packages/gauntlet-solana-contracts/package.json
@@ -1,7 +1,7 @@
{
"name": "@chainlink/gauntlet-solana-contracts",
"name": "@chainlink/solana-gauntlet-contracts",
"version": "0.0.1",
"description": "Gauntlet Solana Contracts",
"description": "Solana Gauntlet Contracts",
"keywords": [
"typescript",
"cli"
Expand All @@ -26,7 +26,7 @@
},
"dependencies": {
"@chainlink/gauntlet-core": "0.1.2",
"@chainlink/gauntlet-solana": "*",
"@chainlink/solana-gauntlet": "*",
"@chainlink/gauntlet-serum-multisig": "*",
"@ethersproject/keccak256": "^5.5.0",
"@solana/spl-token": "^0.1.8",
Expand Down
@@ -1,5 +1,5 @@
import { logger, prompt } from '@chainlink/gauntlet-core/dist/utils'
import { SolanaCommand } from '@chainlink/gauntlet-solana'
import { SolanaCommand } from '@chainlink/solana-gauntlet'
import { PublicKey, TransactionInstruction, AccountMeta } from '@solana/web3.js'
import { CONTRACT_LIST, getContract } from '../../lib/contracts'

Expand Down
@@ -1,6 +1,6 @@
import { ICommand, Result } from '@chainlink/gauntlet-core'
import { logger, prompt } from '@chainlink/gauntlet-core/dist/utils'
import { SolanaCommand, TransactionResponse, contracts } from '@chainlink/gauntlet-solana'
import { SolanaCommand, TransactionResponse, contracts } from '@chainlink/solana-gauntlet'
import { CONTRACT_LIST, getDeploymentContract } from '../../lib/contracts'

enum SOLANA_OPERATIONS {
Expand Down