98 lines
3.3 KiB
Markdown
98 lines
3.3 KiB
Markdown
# Hacking
|
|
|
|
Instructions WIP. Kindly give feedback :)
|
|
|
|
## Development dependencies
|
|
|
|
1. [pkg-config](https://packages.debian.org/bullseye/pkg-config)
|
|
2. [GNU make](https://packages.debian.org/bullseye/make)
|
|
3. [libssl-dev](https://packages.debian.org/bullseye/libssl-dev)
|
|
4. Rust(see [installation instructions](#install-rust))
|
|
5. Docker-compose
|
|
|
|
### Install Rust
|
|
|
|
Install Rust using [rustup](https://rustup.rs/).
|
|
|
|
`rustup` is the official Rust installation tool. It enables installation
|
|
of multiple versions of `rustc` for different architectures across
|
|
multiple release channels(stable, nightly, etc.).
|
|
|
|
Rust undergoes [six-week release
|
|
cycles](https://doc.rust-lang.org/book/appendix-05-editions.html#appendix-e---editions)
|
|
and some of the dependencies that are used in this program have often
|
|
relied on cutting edge features of the Rust compiler. OS Distribution
|
|
packaging teams don't often track the latest releases. For this reason,
|
|
we encourage managing your Rust installation with `rustup`.
|
|
|
|
**`rustup` is the officially supported Rust installation method of this
|
|
project.**
|
|
|
|
```bash
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
```
|
|
|
|
### Setting up the workspace
|
|
After installing rust, the database schema needs to be migrated,
|
|
we use `sqlx` in this project to handle this. However, before running
|
|
this application you might end up finding yourself stuck, here are a
|
|
few things that you might come across.
|
|
|
|
#### Environment variables
|
|
> thread 'main' panicked at 'called `Result::unwrap()` on an `Err`
|
|
> value: missing field `url`'
|
|
|
|
Please ensure that you have the `.env` stored in the root of the
|
|
repository, you can copy this from the `.env-sample` present in
|
|
the root of the repository.
|
|
|
|
[temporary fix] There is also a need for the `DATABASE_URL` to
|
|
be defined, so add that in too.
|
|
|
|
Next up, run the following commands to have the project compile and run,
|
|
```bash
|
|
source .env
|
|
make migrate
|
|
make
|
|
```
|
|
|
|
This should ideally get your instance of Starchart running, and if
|
|
you face any issues at this point, it's a good idea to check your
|
|
environment variables once more, and review the dependencies for
|
|
the project.
|
|
|
|
## Implementing Support for $FORGE
|
|
|
|
> In the future, Starchart will be modified to talk forge federation
|
|
> ActivityPub protocol(general term, not referring to
|
|
> [forgefed](https://forgefed.peers.community/)), so implementing support
|
|
> for $FORGE would mean implementing that protocol for $FORGE.
|
|
|
|
**TODO**
|
|
|
|
### Testing
|
|
|
|
**2022-04-13:** Support for [Gitea](https://gitea.io) is WIP and because
|
|
Gitea is Free Software and light-weight to run within CI/CD environment,
|
|
we are able to run a Gitea instate and run tests against it. See
|
|
[docker-compose-dev-deps.yml](../docker-compose-dev-deps.yml).
|
|
|
|
## Implementing Support for $DATABASE
|
|
|
|
> Thank you for your interest in adding support for a new database. Please let us know about your effort
|
|
> so that we can link to it on this repository :)
|
|
|
|
Starchart defines all database operations in [`db-core`](../db/db-core])
|
|
local crate. Implementing `SCDatabase` from the same crate will add
|
|
support for your database.
|
|
|
|
### Testing
|
|
|
|
Tests are generic over all database support implementations, so tests
|
|
are implemented as part of the core package at
|
|
[db-core/tests.rs](../db/db-core/src/tests.rs) and re-exported for use
|
|
within tests.
|
|
|
|
Please see
|
|
[SQLite tests implementation](../db/db-sqlx-sqlite/src/tests.rs) for
|
|
inspiration.
|