This doc is for contributors to Temporal Server (hopefully that's you!)
Note: All contributors also need to fill out the Temporal Contributor License Agreement before we can merge in any of your changes.
- Go Lang (minimum version required is 1.18):
- Install on macOS with
brew install go
. - Install on Ubuntu with
sudo apt install golang
.
- Install on macOS with
- Protocol buffers compiler (only if you are going to change
proto
files):- Install on macOS with
brew install protobuf
. - Install on Ubuntu with
sudo apt install protobuf-compiler
.
- Install on macOS with
Note: it is possible to run Temporal server without a
docker
. If for some reason (for example, performance on macOS) you want to run dependencies on the host OS, please follow the doc.
For developing on Windows, install Windows Subsystem for Linux 2 (WSL2) and Ubuntu. After that, follow the guidance for installing prerequisites, building, and testing on Ubuntu.
Temporal uses go modules, there is no dependency on $GOPATH
variable. Clone the repo into the preferred location:
git clone https://github.com/temporalio/temporal.git
For the very first time build temporal-server
and helper tools with simple make
command:
make
It will install all other build dependencies and build the binaries.
Further you can build binaries without running tests with:
make bins
Please check the top of our Makefile for other useful build targets.
Tests require runtime dependencies. They can be run with start-dependencies
target (uses docker-compose
internally). Open new terminal window and run:
make start-dependencies
Before testing on macOS, make sure you increase the file handle limit:
ulimit -n 8192
Run unit tests:
make unit-test
Run all integration tests:
make integration-test
Or run all the tests at once:
make test
You can also run a single test:
go test -v <path> -run <TestSuite> -testify.m <TestSpecificTaskName>
for example:
go test -v github.com/temporalio/temporal/common/persistence -run TestCassandraPersistenceSuite -testify.m TestPersistenceStartWorkflow
When you are done, don't forget to stop docker-compose
(with Ctrl+C
) and clean up all dependencies:
make stop-dependencies
First start runtime dependencies. They can be run with start-dependencies
target (uses docker-compose
internally). Open new terminal window and run:
make start-dependencies
then create database schema:
make install-schema
and then run the server:
make start
Now you can create default namespace with tctl
:
make tctl
./tctl --ns default namespace register
and run samples from Go and Java samples repos. Also, you can access web UI at localhost:8088
.
When you are done, press Ctrl+C
to stop the server. Don't forget to stop dependencies (with Ctrl+C
) and clean up resources:
make stop-dependencies
This project is Open Source Software, and requires a header at the beginning of all source files. To verify that all files contain the header execute:
make copyright
Overcommit adds some requirements to your commit messages. At Temporal, we follow the Chris Beams guide to writing git commit messages. Read it, follow it, learn it, love it.
All commit messages are from the titles of your pull requests. So make sure follow the rules when titling them. Please don't use very generic titles like "bug fixes".
All PR titles should start with Upper case and have no dot at the end.