This is the repo for the app codenamed Pulp Fiction, a mobile based image sharing app with native NFT creation and trading functionality. This repo contains code for the mobile app itself, its companion backend service, the smart contract code itself, and any cloud based infrastructure necessary to support these things.
This project uses Bazel as a build tool. The reason for this is that Bazel is a cross language build tool that enables using the same build tool to build, test, and deploy all aspects of the application, regardless of which language they are written in. Bazelisk is a command line tool for managing the Bazel installation on your machine, so you don't have to worry about which version you have installed. To install Bazelisk run
brew install bazelisk
This project uses Make as a tool for defining common operations carried out when building, testing, and deploying code for the project. The reason for this is it provides a nice mechanism for ensuring all commonly used commands are available in VCS for developers to see. It also provides a mechanism for defining a common set of names for those operations (e.g. every subproject can have build
and test
target even though the code in those targets may differ between subprojects). Targets can be run by switching to the directory containing the relevant Makefile and running the command
make $TARGET_NAME
This project uses Protobuf for specifying data models for data that is transported between services and GRPC for transporting data between the services. The reason for this is these tools provide a mechanism for specifying data models and API endpoints in a language agnostic IDL and come with native functionality for building these things into the language of your choice. This autogenerated code is not checked into the repo, rather it is created as part of the build process from the files in the protos
directory. The command to generate the Protobuf + GRPC code for a subproject is always stored in the proto
target in that subproject's Makefile.
This project has been tested with XCode 13.3, Swift 5.6, and Java 17. To build the app from the command line run
make build_all
To execute the tests run
make test_all
Automated continuous integrated is accomplished using CircleCI. The CircleCI project UI can be found here. CircleCI jobs are triggered on Pull Request and push to master.
This project use Gitlab as a remote repository. This project uses GitHub Flow as a branching strategy. To make a contribution make sure your master branch is up to date, create a feature branch from master, make the necessary changes, run any formatting and linting tools for the subproject, make sure all tests pass, push to a remote feature branch and open a PR to master. Give the PR a descriptive title and in the PR message add a #Changelog and #Testing section to give a short bullet point description of the changes it contains and how it's been tested. Once it passes review you may merge your branch to master. Make sure to only "Squash Merge" PRs and delete your remote feature branch after merge as this helps to keep the commit history of master clean and the repo more easily understandable.