diff --git a/.github/release-please.yml b/.github/release-please.yml new file mode 100644 index 00000000..d100bef8 --- /dev/null +++ b/.github/release-please.yml @@ -0,0 +1,11 @@ +handleGHRelease: true +manifest: true +releaseType: go-yoshi + +branches: + - branch: main + releaseType: go-yoshi + handleGHRelease: true + manifest: true + manifestFile: .release-please-manifest.json + manifestConfig: release-please-config.json \ No newline at end of file diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000..fea34540 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.0.0" +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3bcdc104..53edf2a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,29 +1,136 @@ -# How to Contribute +# Contributing -We'd love to accept your patches and contributions to this project. There are -just a few small guidelines you need to follow. +1. [File an issue](https://github.com/googleapis/go-sql-spanner/issues/new/choose). + The issue will be used to discuss the bug or feature and should be created + before sending a PR. -## Contributor License Agreement +1. [Install Go](https://golang.org/dl/). + 1. Ensure that your `GOBIN` directory (by default `$(go env GOPATH)/bin`) + is in your `PATH`. + 1. Check it's working by running `go version`. + * If it doesn't work, check the install location, usually + `/usr/local/go`, is on your `PATH`. -Contributions to this project must be accompanied by a Contributor License -Agreement. You (or your employer) retain the copyright to your contribution; -this simply gives us permission to use and redistribute your contributions as -part of the project. Head over to to see -your current agreements on file or to sign a new one. +1. Sign one of the + [contributor license agreements](#contributor-license-agreements) below. -You generally only need to submit a CLA once, so if you've already submitted one -(even if it was for a different project), you probably don't need to do it -again. +1. Clone the repo: + `git clone https://github.com/googleapis/go-sql-spanner` -## Code Reviews +1. Change into the checked out source: + `cd go-sql-spanner` -All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. Consult -[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more -information on using pull requests. +1. Fork the repo. -## Community Guidelines +1. Set your fork as a remote: + `git remote add fork git@github.com:GITHUB_USERNAME/go-sql-spanner.git` -This project follows [Google's Open Source Community -Guidelines](https://opensource.google/conduct/). +1. Make changes, commit to your fork. + Commit messages should follow the + [Conventional Commits Style](https://www.conventionalcommits.org). The scope + portion should always be filled with the name of the package affected by the + changes being made. For example: + ``` + feat(functions): add gophers codelab + ``` + +1. Send a pull request with your changes. + + To minimize friction, consider setting `Allow edits from maintainers` on the + PR, which will enable project committers and automation to update your PR. + +1. A maintainer will review the pull request and make comments. + + Prefer adding additional commits over amending and force-pushing since it can + be difficult to follow code reviews when the commit history changes. + + Commits will be squashed when they're merged. + +## Testing + +We test code against two versions of Go, the minimum and maximum versions +supported by our clients. To see which versions these are checkout our +[README](README.md#supported-versions). + +### Integration Tests + +In addition to the unit tests, you may run the integration test suite. + +#### GCP Setup + +To run the integrations tests, creation and configuration of a project in +the Google Developers Console is required. + +After creating the project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount) +for project. Ensure the project-level **Owner** +[IAM role](https://console.cloud.google.com/iam-admin/iam/project) role is added to +each service account. During the creation of the service account, you should +download the JSON credential file for use later. + +#### Local Setup + +Once the project is created and configured, set the following environment +variables: + +- `SPANNER_TEST_PROJECT`: Developers Console project's ID (e.g. + bamboo-shift-455). + +Install the [gcloud command-line tool][gcloudcli] to your machine and use it to +create some resources used in integration tests. + +From the project's root directory: + +``` sh +# Sets the default project in your env. +$ gcloud config set project $SPANNER_TEST_PROJECT + +# Authenticates the gcloud tool with your account. +$ gcloud auth login + +# Creates a Spanner instance for the spanner integration tests. +$ gcloud beta spanner instances create go-integration-test --config regional-us-central1 --nodes 10 --description 'Instance for go client test' +# NOTE: Spanner instances are priced by the node-hour, so you may want to +# delete the instance after testing with 'gcloud beta spanner instances delete'. + +$ export SPANNER_TEST_INSTANCE=go-integration-test +``` + +It may be useful to add exports to your shell initialization for future use. +For instance, in `.zshrc`: + +```sh +#### START Test Variables +# Developers Console project's ID (e.g. bamboo-shift-455) for the general project. +export SPANNER_TEST_PROJECT=your-project + +# Developers Console Spanner's instance ID (e.g. spanner-instance) for the running tests. +export SPANNER_TEST_INSTANCE=go-integration-test +#### END Test Variables +``` + +#### Running + +Once you've done the necessary setup, you can run the integration tests by +running: + +``` sh +$ go test -v ./... +``` + +## Contributor License Agreements + +Before we can accept your pull requests you'll need to sign a Contributor +License Agreement (CLA): + +- **If you are an individual writing original source code** and **you own the + intellectual property**, then you'll need to sign an [individual CLA][indvcla]. +- **If you work for a company that wants to allow you to contribute your + work**, then you'll need to sign a [corporate CLA][corpcla]. + +You can sign these electronically (just scroll to the bottom). After that, +we'll be able to accept your pull requests. + +[gcloudcli]: https://developers.google.com/cloud/sdk/gcloud/ +[indvcla]: https://developers.google.com/open-source/cla/individual +[corpcla]: https://developers.google.com/open-source/cla/corporate \ No newline at end of file diff --git a/README.md b/README.md index befa4722..fcc86c93 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,6 @@ [Google Cloud Spanner](https://cloud.google.com/spanner) driver for Go's [database/sql](https://golang.org/pkg/database/sql/) package. - -This support is currently in the __Preview__ release status. - ``` go import _ "github.com/googleapis/go-sql-spanner" @@ -148,3 +145,29 @@ initial attempt and the retry attempt, the Aborted error will be propagated to the client application as an `spannerdriver.ErrAbortedDueToConcurrentModification` error. +## [Go Versions Supported](#supported-versions) + +Our libraries are compatible with at least the three most recent, major Go +releases. They are currently compatible with: + +- Go 1.18 +- Go 1.17 +- Go 1.16 +- Go 1.15 + +## Authorization + +By default, each API will use [Google Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials) +for authorization credentials used in calling the API endpoints. This will allow your +application to run in many environments without requiring explicit configuration. + +## Contributing + +Contributions are welcome. Please, see the +[CONTRIBUTING](https://github.com/googleapis/go-sql-spanner/blob/main/CONTRIBUTING.md) +document for details. + +Please note that this project is released with a Contributor Code of Conduct. +By participating in this project you agree to abide by its terms. +See [Contributor Code of Conduct](https://github.com/googleapis/go-sql-spanner/blob/main/CODE_OF_CONDUCT.md) +for more information. diff --git a/driver.go b/driver.go index b4527ccc..f2fe3bec 100644 --- a/driver.go +++ b/driver.go @@ -37,20 +37,21 @@ import ( "google.golang.org/grpc/status" ) -const userAgent = "go-sql-spanner/0.1" +const userAgent = "go-sql-spanner/1.0.0" // dsnRegExpString describes the valid values for a dsn (connection name) for // Google Cloud Spanner. The string consists of the following parts: -// 1. (Optional) Host: The host name and port number to connect to. -// 2. Database name: The database name to connect to in the format `projects/my-project/instances/my-instance/databases/my-database` -// 3. (Optional) Parameters: One or more parameters in the format `name=value`. Multiple entries are separated by `;`. -// The supported parameters are: -// - credentials: File name for the credentials to use. The connection will use the default credentials of the -// environment if no credentials file is specified in the connection string. -// - usePlainText: Boolean that indicates whether the connection should use plain text communication or not. Set this -// to true to connect to local mock servers that do not use SSL. -// - retryAbortsInternally: Boolean that indicates whether the connection should automatically retry aborted errors. -// The default is true. +// 1. (Optional) Host: The host name and port number to connect to. +// 2. Database name: The database name to connect to in the format `projects/my-project/instances/my-instance/databases/my-database` +// 3. (Optional) Parameters: One or more parameters in the format `name=value`. Multiple entries are separated by `;`. +// The supported parameters are: +// - credentials: File name for the credentials to use. The connection will use the default credentials of the +// environment if no credentials file is specified in the connection string. +// - usePlainText: Boolean that indicates whether the connection should use plain text communication or not. Set this +// to true to connect to local mock servers that do not use SSL. +// - retryAbortsInternally: Boolean that indicates whether the connection should automatically retry aborted errors. +// The default is true. +// // Example: `localhost:9010/projects/test-project/instances/test-instance/databases/test-database;usePlainText=true` var dsnRegExp = regexp.MustCompile("((?P[\\w.-]+(?:\\.[\\w\\.-]+)*[\\w\\-\\._~:/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+)/)?projects/(?P(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?P([a-z]|[-]|[0-9])+)(/databases/(?P([a-z]|[-]|[_]|[0-9])+))?)?(([\\?|;])(?P.*))?") diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000..e8fb0da9 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,11 @@ +{ + "release-type": "go-yoshi", + "separate-pull-requests": true, + "include-component-in-tag": false, + "packages": { + ".": { + "component": "main" + } + }, + "plugins": ["sentence-case"] +} \ No newline at end of file