solana-program-library/README.md

104 lines
3.0 KiB
Markdown
Raw Normal View History

2020-05-29 15:00:47 -07:00
[![Build status][travis-image]][travis-url]
2020-07-28 11:00:37 -07:00
[travis-image]:
https://travis-ci.org/solana-labs/solana-program-library.svg?branch=master
2020-05-29 15:00:47 -07:00
[travis-url]: https://travis-ci.org/solana-labs/solana-program-library
2020-05-29 12:41:23 -07:00
# Solana Program Library
2020-05-31 08:52:00 -07:00
The Solana Program Library (SPL) is a collection of on-chain programs targeting
2020-07-28 11:00:37 -07:00
the [Sealevel parallel
runtime](https://medium.com/solana-labs/sealevel-parallel-processing-thousands-of-smart-contracts-d814b378192).
These programs are tested against Solana's implementation of Sealevel,
solana-runtime, and deployed to its mainnet. As others implement Sealevel, we
will graciously accept patches to ensure the programs here are portable across
all implementations.
Full documentation is available at https://spl.solana.com
## Building
2020-07-28 11:00:37 -07:00
These programs cannot be built directly via cargo and instead require the build
scripts located in Solana's BPF-SDK.
Download or update the BPF-SDK by running:
```bash
$ ./do.sh update
```
To build all programs, run:
```bash
2020-07-21 17:37:38 -07:00
$ ./do.sh build all
```
Or choose a specific program:
```bash
$ ./do.sh build <program>
```
## Testing
Unit tests contained within all projects can be built via:
```bash
2020-07-21 17:37:38 -07:00
$ ./do.sh test all
```
Or:
```bash
$ ./do.sh test <program>
```
2020-07-28 11:00:37 -07:00
End-to-end testing may be performed via the per-project .js bindings. See the
[token program's js project](token/js) for an example.
2020-06-24 10:56:25 -07:00
## Clippy
Clippy is also supported via:
```bash
2020-07-21 17:37:38 -07:00
$ ./do.sh clippy all
```
Or:
```
$ ./do.sh clippy <program>
```
## Release Process
SPL programs are currently tagged and released manually. Each program is
versioned independently of the others, with all new development occurring on
master. Once a program is tested and deemed ready for release:
### Bump Version
* Increment the version number in the program's Cargo.toml
* Generate a new program ID and replace in `<program>/program-id.md` and `<program>/src/lib.rs`
* Run `./do.sh build <program>` to update relevant C bindings. (Note the location of the generated `spl_<program>.so` for attaching to the Github release.)
* Open a PR with these version changes and merge after passing CI.
### Create Github tag
Program tags are of the form `<program>-vX.Y.Z`.
Create the new tag at the version-bump commit and push to the
solana-program-library repository, eg:
```
$ git tag token-v1.0.0 b24bfe7
$ git push upstream --tags
```
### Publish Github release
* Go to [GitHub Releases UI](https://github.com/solana-labs/solana-program-library/releases)
* Click "Draft new release", and enter the new tag in the "Tag version" box.
* Title the release "SPL <Program> vX.Y.Z", complete the description, and attach the `spl_<program>.so` binary
* Click "Publish release"
### Publish to Crates.io
Navigate to the program directory and run `cargo package`
to test the build. Then run `cargo publish`. (Currently, programs with generated
C bindings fail the final step of verification due to the location of the
generated file. Once you are certain the crate is ready, run `cargo publish --no-verify`
to bypass this error.)