Update - Sept 2019: This repo is deprecated. However, Oleg Glozman is maintaining an active fork of the repo:
minimal-fixes-to-compile
branch adds minimal changes to this original repo to make it compile without altering the original functionalityStaffjoy is shutting down, so we are open-sourcing our code. This the second version of our product, a ground-up rewrite intended for small businesses, like restaurants. This product was very simple and did not provide features like allowing workers to log in, clock-in, etc. If you want those features, please use Staffjoy Suite You can learn about the design journey from V1 to V2 in this blog post.
We started building V2 in August 2016, became feature complete in November 2016, and launched to the press in January 2017.
This is a monorepo, so all of the code for all of the services are in this repo. The core technologies are the Bazel build system, Kubernetes (including its DNS for internal service discovery), Redux, Go, Protocol Buffers, gRPC, and Yarn. In staging and production, we used Google Container Engine and their managed databases.
The authors of the original code were @philipithomas, @samdturner, @andhess, and some contractors. @kootommy designed the application and most of the marketing pages, and worked closely with engineering on implementation. This is a fork of the internal repository. For security purposes, the Git history has been squashed.
Read about the V2 architecture on our blog
/swagger.json
apidocs
package to serve a swagger UI at /ui/
Welcome to Staffjoy!
We use a monorepo that stores all of our code in this single repo. We use Vagrant to run a kubernetes cluster locally on your laptop. This makes it easy to run all of Staffjoy's services.
If you are running Go code, you should set up your $GOPATH, then clone this repository into the v2.staffjoy.com
package:
mkdir -p $GOPATH/src/
git clone git@github.com:Staffjoy/v2.git $GOPATH/src/v2.staffjoy.com/
vagrant up
to boot the dev server.vagrant plugin install vagrant-hostmanager
Unison syncs files between the host and the VM in a way that preserves simlinks.
Unfortunately, installing it on OSX is a bit of a pain because the version and the compiler must be the same as the one in Vagrant!
First, install OCaml version 3.12 - you may need to say "yes" to some command prompts:
wget https://raw.github.com/ocaml/opam/master/shell/opam_installer.sh -O - | sh -s /usr/local/bin 3.12.1
Check that ocaml -version
is 3.12.1. If it is not, try removing /usr/local/bin/ocaml
and running opam switch 3.12.1
.
Then, compile unison with this version of ocaml. You may be prompted for your password.
cd /tmp
curl -O https://www.seas.upenn.edu/~bcpierce/unison/download/releases/unison-2.40.102/unison-2.40.102.tar.gz
tar -xvzf unison-2.40.102.tar.gz
cd unison-2.40.102
make UISTYLE=text
sudo cp unison /usr/local/bin
Run make dev
. Code will boot and run at staffjoy-v2.local. Note that the first time you do this could take up to 45 minutes in order to provision the VM!
Changes will trigger an automatic rebuild and redeployment. (Check deployment progress at kubernetes.staffjoy-v2.local/ui/). End the dev server with control + c
(and it will automatically shut off the VM).
Known Bug on OSX Sierra: If Vagrant cannot find download the box, run sudo rm /opt/vagrant/embedded/bin/curl
. (Bug tracking link)
If you run into issues with stuck deployments in development - then run make dev-k8s-fix
then re-run make dev
.
Access the VM by running vagrant ssh
. Code is located in /home/vagrant/golang/src/v2.staffjoy.com/
(aliased to $STAFFJOY
, i.e. cd $STAFFJOY
).
To build code and run it locally, in vagrant go to the code directory $STAFFJOY
in vagrant, then run make dev-build
for a one-time build.
If things are really goofing, run vagrant destroy -f
then rebuild.
vagrant ssh
), then examine running docker containers (docker ps
). If it's not running dozens of contianers, there's a problem. To fix this:, run make dev-k8s-fix
. (Your local data may be wiped out).$STAFFJOY
directory) - try running make dev
again, or manually running unison (the syncer) on the host machine with ./vagrant/unison.sh
.make dev
and to instead call its two subcommands separately (manually): ./vagrant/unison.sh
to sync files on your computer, then SSHing into Vagrant and manually triggering builds (cd $STAFFJOY && make dev-build
)development
namespace. You can see logs from a "pod" (container) through the UI (link)support
api permissions in dev.If you are loading assets like templates, CSS, JS, etc - you need to package the the data into the binary. Otherwise, the app will ship and it won't be able to find the assets!
To do this, use the go-bindata project. If you modify any of the asset files, you will need to rebuild them then commit the resulting bindata.go
file and commit it. You have been warned!
Most services provide a build.sh
file that compiles all the data that needs to be committed.
The tool GoConvey is great for seeing tests.
ENV
: Set to development
,staging
, or production
. Null defaults to development
SENTRY_DSN
: Set to the Sentry api key in every Go service for proper error tracking and reportingIf you modify the files in protobuf/
, run make protobuf
to recompile all of the generated files.
⚠️ Please make sure that the version of protobuf matches the runtime version (see this issue):
go get github.com/golang/protobuf/...
cd $GOPATH/src/github.com/golang/protobuf/
# Switch to version that is packaged in app
git checkout df1d3ca07d2d07bba352d5b73c4313b4e2a6203e
# Re-install
go install github.com/golang/protobuf/proto
cd $GOPATH/src/v2.staffjoy.com/
make protobuf
If you're getting started with protocol buffers, here are some resources:
godoc -http=":8080"
. You'll be able to see all docs at localhost:8080此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。