695 lines
73 KiB
Markdown
695 lines
73 KiB
Markdown
---
|
||
obj: application
|
||
repo: https://github.com/charmbracelet/soft-serve
|
||
rev: 2024-04-01
|
||
---
|
||
|
||
# soft-serve
|
||
A tasty, self-hostable [Git](../../dev/Git.md) server for the command line. 🍦
|
||
|
||
![SoftServe][SoftServe]
|
||
|
||
![Soft Serve screencast](https://github.com/charmbracelet/soft-serve/assets/42545625/c754c746-dc4c-44a6-9c39-28649264cbf2)
|
||
|
||
- Easy to navigate TUI available over [SSH](../network/SSH.md)
|
||
- Clone repos over [SSH](../network/SSH.md), [HTTP](../../internet/HTTP.md), or [Git](../../dev/Git.md) protocol
|
||
- Git LFS support with both [HTTP](../../internet/HTTP.md) and [SSH](../network/SSH.md) backends
|
||
- Manage repos with [SSH](../network/SSH.md)
|
||
- Create repos on demand with [SSH](../network/SSH.md) or `git push`
|
||
- Browse repos, files and commits with [SSH](../network/SSH.md)-accessible UI
|
||
- Print files over [SSH](../network/SSH.md) with or without syntax highlighting and line numbers
|
||
- Easy access control
|
||
- [SSH](../network/SSH.md) authentication using public keys
|
||
- Allow/disallow anonymous access
|
||
- Add collaborators with [SSH](../network/SSH.md) public keys
|
||
- Repos can be public or private
|
||
- User access tokens
|
||
|
||
## Where can I see it?
|
||
Just run `ssh git.charm.sh` for an example. You can also try some of the following commands:
|
||
|
||
```shell
|
||
# Jump directly to a repo in the TUI
|
||
ssh git.charm.sh -t soft-serve
|
||
|
||
# Print out a directory tree for a repo
|
||
ssh git.charm.sh repo tree soft-serve
|
||
|
||
# Print a specific file
|
||
ssh git.charm.sh repo blob soft-serve cmd/soft/main.go
|
||
|
||
# Print a file with syntax highlighting and line numbers
|
||
ssh git.charm.sh repo blob soft-serve cmd/soft/main.go -c -l
|
||
```
|
||
|
||
Or you can use Soft Serve to browse local repositories using `soft browse [directory]` or running `soft` within a [Git](../../dev/Git.md) repository.
|
||
|
||
## Docker
|
||
The official Soft Serve [Docker](../../tools/Docker.md) images are available at [charmcli/soft-serve](https://hub.docker.com/r/charmcli/soft-serve). Development and nightly builds are available at [ghcr.io/charmbracelet/soft-serve](https://github.com/charmbracelet/soft-serve/pkgs/container/soft-serve)
|
||
|
||
```shell
|
||
docker pull charmcli/soft-serve:latest
|
||
```
|
||
|
||
Here’s how you might run `soft-serve` as a container. Keep in mind that repositories are stored in the `/soft-serve` directory, so you’ll likely want to mount that directory as a volume in order keep your repositories backed up.
|
||
|
||
```shell
|
||
docker run \
|
||
--name=soft-serve \
|
||
--volume /path/to/data:/soft-serve \
|
||
--publish 23231:23231 \
|
||
--publish 23232:23232 \
|
||
--publish 23233:23233 \
|
||
--publish 9418:9418 \
|
||
--restart unless-stopped \
|
||
charmcli/soft-serve:latest
|
||
```
|
||
|
||
Or by using [docker compose](../../tools/Docker%20Compose.md):
|
||
```yaml
|
||
---
|
||
version: "3.1"
|
||
services:
|
||
soft-serve:
|
||
image: charmcli/soft-serve:latest
|
||
container_name: soft-serve
|
||
volumes:
|
||
- /path/to/data:/soft-serve
|
||
ports:
|
||
- 23231:23231
|
||
- 23232:23232
|
||
- 23233:23233
|
||
- 9418:9418
|
||
restart: unless-stopped
|
||
```
|
||
|
||
## Setting up a server
|
||
Make sure `git` is installed, then run `soft serve`. That’s it.
|
||
|
||
This will create a `data` directory that will store all the repos, ssh keys, and database.
|
||
|
||
To change the default data path use `$SOFT_SERVE_DATA_PATH` environment variable.
|
||
|
||
```shell
|
||
SOFT_SERVE_DATA_PATH=/var/lib/soft-serve soft serve
|
||
```
|
||
|
||
When you run Soft Serve for the first time, make sure you have the `$SOFT_SERVE_INITIAL_ADMIN_KEYS` environment variable is set to your ssh authorized key. Any added key to this variable will be treated as admin with full privileges.
|
||
|
||
Using this environment variable, Soft Serve will create a new `admin` user that has full privileges. You can rename and change the user settings later.
|
||
|
||
### Systemd
|
||
Most Linux OSes use [Systemd](../../linux/systemd/Systemd.md) as an init system and service management. You can use [Systemd](../../linux/systemd/Systemd.md) to manage Soft Serve as a service on your host machine.
|
||
|
||
Our Soft Serve deb/rpm packages come with [Systemd](../../linux/systemd/Systemd.md) service files pre-packaged. You can install `soft-serve` from our Apt/Yum repositories.
|
||
|
||
#### Writing a Systemd Service File
|
||
> **Note** you can skip this section if you are using our deb/rpm packages or installed Soft Serve from our Apt/Yum repositories.
|
||
|
||
Start by writing a [Systemd](../../linux/systemd/Systemd.md) service file to define how your Soft Serve server should start.
|
||
|
||
First, we need to specify where the data should live for our server. Here I will be choosing `/var/local/lib/soft-serve` to store the server's data. Soft Serve will look for this path in the `$SOFT_SERVE_DATA_PATH` environment variable.
|
||
|
||
Make sure this directory exists before proceeding.
|
||
```shell
|
||
sudo mkdir -p /var/local/lib/soft-serve
|
||
```
|
||
|
||
We will also create a `/etc/soft-serve.conf` file for any extra server settings that we want to override.
|
||
```
|
||
# Config defined here will override the config in /var/local/lib/soft-serve/config.yaml
|
||
# Keys defined in `SOFT_SERVE_INITIAL_ADMIN_KEYS` will be merged with
|
||
# the `initial_admin_keys` from /var/local/lib/soft-serve/config.yaml.
|
||
#
|
||
#SOFT_SERVE_GIT_LISTEN_ADDR=:9418
|
||
#SOFT_SERVE_HTTP_LISTEN_ADDR=:23232
|
||
#SOFT_SERVE_SSH_LISTEN_ADDR=:23231
|
||
#SOFT_SERVE_SSH_KEY_PATH=ssh/soft_serve_host_ed25519
|
||
#SOFT_SERVE_INITIAL_ADMIN_KEYS='ssh-ed25519 AAAAC3NzaC1lZDI1...'
|
||
```
|
||
|
||
> **Note** Soft Serve stores its server configuration and settings in `config.yaml` under its _data path_ directory specified using `$SOFT_SERVE_DATA_PATH` environment variable.
|
||
|
||
Now, let's write a new `/etc/systemd/system/soft-serve.service` Systemd service file:
|
||
|
||
```
|
||
[Unit]
|
||
Description=Soft Serve git server 🍦
|
||
Documentation=https://github.com/charmbracelet/soft-serve
|
||
Requires=network-online.target
|
||
After=network-online.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
Restart=always
|
||
RestartSec=1
|
||
ExecStart=/usr/bin/soft serve
|
||
Environment=SOFT_SERVE_DATA_PATH=/var/local/lib/soft-serve
|
||
EnvironmentFile=-/etc/soft-serve.conf
|
||
WorkingDirectory=/var/local/lib/soft-serve
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
Great, we now have a [Systemd](../../linux/systemd/Systemd.md) service file for Soft Serve. The settings defined here may vary depending on your specific setup. This assumes that you want to run Soft Serve as `root`.
|
||
|
||
#### Start Soft Serve on boot
|
||
Now that we have our Soft Serve [Systemd](../../linux/systemd/Systemd.md) service file in-place, let's go ahead and enable and start Soft Serve to run on-boot.
|
||
|
||
```shell
|
||
# Reload systemd daemon
|
||
sudo systemctl daemon-reload
|
||
# Enable Soft Serve to start on-boot
|
||
sudo systemctl enable soft-serve.service
|
||
# Start Soft Serve now!!
|
||
sudo systemctl start soft-serve.service
|
||
```
|
||
|
||
You can monitor the server logs using `journalctl -u soft-serve.service`. Use `-f` to _tail_ and follow the logs as they get written.
|
||
|
||
### Server Configuration
|
||
Once you start the server for the first time, the settings will be in `config.yaml` under your data directory. The default `config.yaml` is self-explanatory and will look like this:
|
||
|
||
```yaml
|
||
# Soft Serve Server configurations
|
||
|
||
# The name of the server.
|
||
# This is the name that will be displayed in the UI.
|
||
name: "Soft Serve"
|
||
|
||
# Log format to use. Valid values are "json", "logfmt", and "text".
|
||
log_format: "text"
|
||
|
||
# The SSH server configuration.
|
||
ssh:
|
||
# The address on which the SSH server will listen.
|
||
listen_addr: ":23231"
|
||
|
||
# The public URL of the SSH server.
|
||
# This is the address that will be used to clone repositories.
|
||
public_url: "ssh://localhost:23231"
|
||
|
||
# The path to the SSH server's private key.
|
||
key_path: "ssh/soft_serve_host"
|
||
|
||
# The path to the SSH server's client private key.
|
||
# This key will be used to authenticate the server to make git requests to
|
||
# ssh remotes.
|
||
client_key_path: "ssh/soft_serve_client"
|
||
|
||
# The maximum number of seconds a connection can take.
|
||
# A value of 0 means no timeout.
|
||
max_timeout: 0
|
||
|
||
# The number of seconds a connection can be idle before it is closed.
|
||
idle_timeout: 120
|
||
|
||
# The Git daemon configuration.
|
||
git:
|
||
# The address on which the Git daemon will listen.
|
||
listen_addr: ":9418"
|
||
|
||
# The maximum number of seconds a connection can take.
|
||
# A value of 0 means no timeout.
|
||
max_timeout: 0
|
||
|
||
# The number of seconds a connection can be idle before it is closed.
|
||
idle_timeout: 3
|
||
|
||
# The maximum number of concurrent connections.
|
||
max_connections: 32
|
||
|
||
# The HTTP server configuration.
|
||
http:
|
||
# The address on which the HTTP server will listen.
|
||
listen_addr: ":23232"
|
||
|
||
# The path to the TLS private key.
|
||
tls_key_path: ""
|
||
|
||
# The path to the TLS certificate.
|
||
tls_cert_path: ""
|
||
|
||
# The public URL of the HTTP server.
|
||
# This is the address that will be used to clone repositories.
|
||
# Make sure to use https:// if you are using TLS.
|
||
public_url: "http://localhost:23232"
|
||
|
||
# The database configuration.
|
||
db:
|
||
# The database driver to use.
|
||
# Valid values are "sqlite" and "postgres".
|
||
driver: "sqlite"
|
||
# The database data source name.
|
||
# This is driver specific and can be a file path or connection string.
|
||
# Make sure foreign key support is enabled when using SQLite.
|
||
data_source: "soft-serve.db?_pragma=busy_timeout(5000)&_pragma=foreign_keys(1)"
|
||
|
||
# Git LFS configuration.
|
||
lfs:
|
||
# Enable Git LFS.
|
||
enabled: true
|
||
# Enable Git SSH transfer.
|
||
ssh_enabled: false
|
||
|
||
# Cron job configuration
|
||
jobs:
|
||
mirror_pull: "@every 10m"
|
||
|
||
# The stats server configuration.
|
||
stats:
|
||
# The address on which the stats server will listen.
|
||
listen_addr: ":23233"
|
||
# Additional admin keys.
|
||
#initial_admin_keys:
|
||
# - "ssh-rsa AAAAB3NzaC1yc2..."
|
||
```
|
||
|
||
You can also use [environment variables](../../linux/Environment%20Variables.md), to override these settings. All server settings [environment variables](../../linux/Environment%20Variables.md) start with `$SOFT_SERVE_` followed by the setting name all in uppercase. Here are some examples:
|
||
|
||
- `$SOFT_SERVE_NAME`: The name of the server that will appear in the TUI
|
||
- `$SOFT_SERVE_SSH_LISTEN_ADDR`: SSH listen address
|
||
- `$SOFT_SERVE_SSH_KEY_PATH`: SSH host key-pair path
|
||
- `$SOFT_SERVE_HTTP_LISTEN_ADDR`: HTTP listen address
|
||
- `$SOFT_SERVE_HTTP_PUBLIC_URL`: HTTP public URL used for cloning
|
||
- `$SOFT_SERVE_GIT_MAX_CONNECTIONS`: The number of simultaneous connections to git daemon
|
||
|
||
#### Database Configuration
|
||
Soft Serve supports both [SQLite](../../dev/programming/SQLite.md) and Postgres for its database. Like all other Soft Serve settings, you can change the database _driver_ and _data source_ using either `config.yaml` or [environment variables](../../linux/Environment%20Variables.md). The default config uses [SQLite](../../dev/programming/SQLite.md) as the default database driver.
|
||
|
||
To use Postgres as your database, first create a Soft Serve database:
|
||
```shell
|
||
psql -h<hostname> -p<port> -U<user> -c 'CREATE DATABASE soft_serve'
|
||
```
|
||
|
||
Then set the database _data source_ to point to your Postgres database. For instance, if you're running Postgres locally, using the default user `postgres` and using a database name `soft_serve`, you would have this config in your config file or environment variable:
|
||
|
||
```yaml
|
||
db:
|
||
driver: "postgres"
|
||
data_source: "postgres://postgres@localhost:5432/soft_serve?sslmode=disable"
|
||
```
|
||
|
||
[Environment variables](../../linux/Environment%20Variables.md) equivalent:
|
||
```shell
|
||
SOFT_SERVE_DB_DRIVER=postgres \
|
||
SOFT_SERVE_DB_DATA_SOURCE="postgres://postgres@localhost:5432/soft_serve?sslmode=disable" \
|
||
soft serve
|
||
```
|
||
|
||
You can specify a database connection password in the _data source_ url. For example, `postgres://myuser:dbpass@localhost:5432/my_soft_serve_db`.
|
||
|
||
#### LFS Configuration
|
||
Soft Serve supports both [Git](../../dev/Git.md) LFS [HTTP](../../internet/HTTP.md) and [SSH](../network/SSH.md) protocols out of the box, there is no need to do any extra set up.
|
||
|
||
Use the `lfs` config section to customize your Git LFS server.
|
||
|
||
> **Note**: The pure-[SSH](../network/SSH.md) transfer is disabled by default.
|
||
|
||
## Server Access
|
||
Soft Serve at its core manages your server authentication and authorization. Authentication verifies the identity of a user, while authorization determines their access rights to a repository.
|
||
|
||
To manage the server users, access, and repos, you can use the [SSH](../network/SSH.md) command line interface.
|
||
|
||
Try `ssh localhost -i ~/.ssh/id_ed25519 -p 23231 help` for more info. Make sure you use your key here.
|
||
|
||
For ease of use, instead of specifying the key, port, and hostname every time you [SSH](../network/SSH.md) into Soft Serve, add your own Soft Serve instance entry to your [SSH](../network/SSH.md) config. For instance, to use `ssh soft` instead of typing `ssh localhost -i ~/.ssh/id_ed25519 -p 23231`, we can define a `soft` entry in our [SSH](../network/SSH.md) config file `~/.ssh/config`.
|
||
|
||
```
|
||
Host soft
|
||
HostName localhost
|
||
Port 23231
|
||
IdentityFile ~/.ssh/id_ed25519
|
||
```
|
||
|
||
Now, we can do `ssh soft` to [SSH](../network/SSH.md) into Soft Serve. Since `git` is also aware of this config, you can use `soft` as the hostname for your clone commands.
|
||
|
||
```shell
|
||
git clone ssh://soft/dotfiles
|
||
# make changes
|
||
# add & commit
|
||
git push origin main
|
||
```
|
||
|
||
> **Note** The `-i` part will be omitted in the examples below for brevity. You can add your server settings to your sshconfig for quicker access.
|
||
|
||
### Authentication
|
||
Everything that needs authentication is done using [SSH](../network/SSH.md). Make sure you have added an entry for your Soft Serve instance in your `~/.ssh/config` file.
|
||
|
||
By default, Soft Serve gives ready-only permission to anonymous connections to any of the above protocols. This is controlled by two settings `anon-access` and `allow-keyless`.
|
||
|
||
- `anon-access`: Defines the access level for anonymous users. Available options are `no-access`, `read-only`, `read-write`, and `admin-access`. Default is `read-only`.
|
||
- `allow-keyless`: Whether to allow connections that doesn't use keys to pass. Setting this to `false` would disable access to [SSH](../network/SSH.md) keyboard-interactive, [HTTP](../../internet/HTTP.md), and [Git](../../dev/Git.md) protocol connections. Default is `true`.
|
||
|
||
```shell
|
||
$ ssh -p 23231 localhost settings
|
||
Manage server settings
|
||
|
||
Usage:
|
||
ssh -p 23231 localhost settings [command]
|
||
|
||
Available Commands:
|
||
allow-keyless Set or get allow keyless access to repositories
|
||
anon-access Set or get the default access level for anonymous users
|
||
|
||
Flags:
|
||
-h, --help help for settings
|
||
|
||
Use "ssh -p 23231 localhost settings [command] --help" for more information about a command.
|
||
```
|
||
|
||
> **Note** These settings can only be changed by admins.
|
||
|
||
When `allow-keyless` is disabled, connections that don't use [SSH](../network/SSH.md) Public Key authentication will get denied. This means cloning repos over [HTTP](../../internet/HTTP.md)(s) or git:// will get denied.
|
||
|
||
Meanwhile, `anon-access` controls the access level granted to connections that use [SSH](../network/SSH.md) Public Key authentication but are not registered users. The default setting for this is `read-only`. This will grant anonymous connections that use [SSH](../network/SSH.md) Public Key authentication `read-only` access to public repos.
|
||
|
||
`anon-access` is also used in combination with `allow-keyless` to determine the access level for [HTTP](../../internet/HTTP.md)(s) and git:// clone requests.
|
||
|
||
#### SSH
|
||
Soft Serve doesn't allow duplicate [SSH](../network/SSH.md) public keys for users. A public key can be associated with one user only. This makes [SSH](../network/SSH.md) authentication simple and straight forward, add your public key to your Soft Serve user to be able to access Soft Serve.
|
||
|
||
#### HTTP
|
||
You can generate user access tokens through the [SSH](../network/SSH.md) command line interface. Access tokens can have an optional expiration date. Use your access token as the basic auth user to access your Soft Serve repos through [HTTP](../../internet/HTTP.md).
|
||
|
||
```shell
|
||
# Create a user token
|
||
ssh -p 23231 localhost token create 'my new token'
|
||
ss_1234abc56789012345678901234de246d798fghi
|
||
|
||
# Or with an expiry date
|
||
ssh -p 23231 localhost token create --expires-in 1y 'my other token'
|
||
ss_98fghi1234abc56789012345678901234de246d7
|
||
```
|
||
|
||
Now you can access to repos that require `read-write` access.
|
||
|
||
```shell
|
||
git clone http://ss_98fghi1234abc56789012345678901234de246d7@localhost:23232/my-private-repo.git my-private-repo
|
||
# Make changes and push
|
||
```
|
||
|
||
### Authorization
|
||
Soft Serve offers a simple access control. There are four access levels, no-access, read-only, read-write, and admin-access.
|
||
|
||
`admin-access` has full control of the server and can make changes to users and repos.
|
||
|
||
`read-write` access gets full control of repos.
|
||
|
||
`read-only` can read public repos.
|
||
|
||
`no-access` denies access to all repos.
|
||
|
||
## User Management
|
||
Admins can manage users and their keys using the `user` command. Once a user is created and has access to the server, they can manage their own keys and settings.
|
||
|
||
To create a new user simply use `user create`:
|
||
```shell
|
||
# Create a new user
|
||
ssh -p 23231 localhost user create beatrice
|
||
|
||
# Add user keys
|
||
ssh -p 23231 localhost user add-pubkey beatrice ssh-rsa AAAAB3Nz...
|
||
ssh -p 23231 localhost user add-pubkey beatrice ssh-ed25519 AAAA...
|
||
|
||
# Create another user with public key
|
||
ssh -p 23231 localhost user create frankie '-k "ssh-ed25519 AAAATzN..."'
|
||
|
||
# Need help?
|
||
ssh -p 23231 localhost user help
|
||
```
|
||
|
||
Once a user is created, they get `read-only` access to public repositories. They can also create new repositories on the server.
|
||
|
||
Users can manage their keys using the `pubkey` command:
|
||
```shell
|
||
# List user keys
|
||
ssh -p 23231 localhost pubkey list
|
||
|
||
# Add key
|
||
ssh -p 23231 localhost pubkey add ssh-ed25519 AAAA...
|
||
|
||
# Wanna change your username?
|
||
ssh -p 23231 localhost set-username yolo
|
||
|
||
# To display user info
|
||
ssh -p 23231 localhost info
|
||
```
|
||
|
||
## Repositories
|
||
You can manage repositories using the `repo` command.
|
||
|
||
```shell
|
||
# Run repo help
|
||
$ ssh -p 23231 localhost repo help
|
||
Manage repositories
|
||
|
||
Usage:
|
||
ssh -p 23231 localhost repo [command]
|
||
|
||
Aliases:
|
||
repo, repos, repository, repositories
|
||
|
||
Available Commands:
|
||
blob Print out the contents of file at path
|
||
branch Manage repository branches
|
||
collab Manage collaborators
|
||
create Create a new repository
|
||
delete Delete a repository
|
||
description Set or get the description for a repository
|
||
hide Hide or unhide a repository
|
||
import Import a new repository from remote
|
||
info Get information about a repository
|
||
is-mirror Whether a repository is a mirror
|
||
list List repositories
|
||
private Set or get a repository private property
|
||
project-name Set or get the project name for a repository
|
||
rename Rename an existing repository
|
||
tag Manage repository tags
|
||
tree Print repository tree at path
|
||
|
||
Flags:
|
||
-h, --help help for repo
|
||
|
||
Use "ssh -p 23231 localhost repo [command] --help" for more information about a command.
|
||
```
|
||
|
||
To use any of the above `repo` commands, a user must be a collaborator in the repository. More on this below.
|
||
|
||
### Creating Repositories
|
||
To create a repository, first make sure you are a registered user. Use the `repo create <repo>` command to create a new repository:
|
||
|
||
```shell
|
||
# Create a new repository
|
||
ssh -p 23231 localhost repo create icecream
|
||
|
||
# Create a repo with description
|
||
ssh -p 23231 localhost repo create icecream '-d "This is an Ice Cream description"'
|
||
|
||
# ... and project name
|
||
ssh -p 23231 localhost repo create icecream '-d "This is an Ice Cream description"' '-n "Ice Cream"'
|
||
|
||
# I need my repository private!
|
||
ssh -p 23231 localhost repo create icecream -p '-d "This is an Ice Cream description"' '-n "Ice Cream"'
|
||
|
||
# Help?
|
||
ssh -p 23231 localhost repo create -h
|
||
```
|
||
|
||
Or you can add your Soft Serve server as a remote to any existing repo, given you have write access, and push to remote:
|
||
```
|
||
git remote add origin ssh://localhost:23231/icecream
|
||
```
|
||
|
||
After you’ve added the remote just go ahead and push. If the repo doesn’t exist on the server it’ll be created.
|
||
```
|
||
git push origin main
|
||
```
|
||
|
||
Repositories can be nested too:
|
||
```shell
|
||
# Create a new nested repository
|
||
ssh -p 23231 localhost repo create charmbracelet/icecream
|
||
|
||
# Or ...
|
||
git remote add charm ssh://localhost:23231/charmbracelet/icecream
|
||
git push charm main
|
||
```
|
||
|
||
### Deleting Repositories
|
||
You can delete repositories using the `repo delete <repo>` command.
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo delete icecream
|
||
```
|
||
|
||
### Renaming Repositories
|
||
Use the `repo rename <old> <new>` command to rename existing repositories.
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo rename icecream vanilla
|
||
```
|
||
|
||
### Repository Collaborators
|
||
Sometimes you want to restrict write access to certain repositories. This can be achieved by adding a collaborator to your repository.
|
||
|
||
Use the `repo collab <command> <repo>` command to manage repo collaborators.
|
||
|
||
```shell
|
||
# Add collaborator to soft-serve
|
||
ssh -p 23231 localhost repo collab add soft-serve frankie
|
||
|
||
# Add collaborator with a specific access level
|
||
ssh -p 23231 localhost repo collab add soft-serve beatrice read-only
|
||
|
||
# Remove collaborator
|
||
ssh -p 23231 localhost repo collab remove soft-serve beatrice
|
||
|
||
# List collaborators
|
||
ssh -p 23231 localhost repo collab list soft-serve
|
||
```
|
||
|
||
### Repository Metadata
|
||
You can also change the repo's description, project name, whether it's private, etc using the `repo <command>` command.
|
||
|
||
```shell
|
||
# Set description for repo
|
||
ssh -p 23231 localhost repo description icecream "This is a new description"
|
||
|
||
# Hide repo from listing
|
||
ssh -p 23231 localhost repo hidden icecream true
|
||
|
||
# List repository info (branches, tags, description, etc)
|
||
ssh -p 23231 localhost repo icecream info
|
||
```
|
||
|
||
To make a repository private, use `repo private <repo> [true|false]`. Private repos can only be accessed by admins and collaborators.
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo icecream private true
|
||
```
|
||
|
||
### Repository Branches & Tags
|
||
Use `repo branch` and `repo tag` to list, and delete branches or tags. You can also use `repo branch default` to set or get the repository default branch.
|
||
|
||
### Repository Tree
|
||
To print a file tree for the project, just use the `repo tree` command along with the repo name as the [SSH](../network/SSH.md) command to your Soft Serve server:
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo tree soft-serve
|
||
```
|
||
|
||
You can also specify the sub-path and a specific reference or branch.
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo tree soft-serve server/config
|
||
ssh -p 23231 localhost repo tree soft-serve main server/config
|
||
```
|
||
|
||
From there, you can print individual files using the `repo blob` command:
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo blob soft-serve cmd/soft/main.go
|
||
```
|
||
|
||
You can add the `-c` flag to enable syntax coloring and `-l` to print line numbers:
|
||
|
||
```shell
|
||
ssh -p 23231 localhost repo blob soft-serve cmd/soft/main.go -c -l
|
||
|
||
```
|
||
|
||
Use `--raw` to print raw file contents. This is useful for dumping binary data.
|
||
|
||
### Repository webhooks
|
||
Soft Serve supports repository [webhooks](../../internet/Webhook.md) using the `repo webhook` command. You can create and manage webhooks for different repository events such as _push_, _collaborators_, and _branch_tag_create_ events.
|
||
|
||
```
|
||
Manage repository webhooks
|
||
|
||
Usage:
|
||
ssh -p 23231 localhost repo webhook [command]
|
||
|
||
Aliases:
|
||
webhook, webhooks
|
||
|
||
Available Commands:
|
||
create Create a repository webhook
|
||
delete Delete a repository webhook
|
||
deliveries Manage webhook deliveries
|
||
list List repository webhooks
|
||
update Update a repository webhook
|
||
|
||
Flags:
|
||
-h, --help help for webhook
|
||
```
|
||
|
||
## The Soft Serve TUI
|
||
Soft Serve TUI is mainly used to browse repos over [SSH](../network/SSH.md). You can also use it to browse local repositories with `soft browse` or running `soft` within a [Git](../../dev/Git.md) repository.
|
||
|
||
```shell
|
||
ssh localhost -p 23231
|
||
```
|
||
|
||
It's also possible to “link” to a specific repo:
|
||
```shell
|
||
ssh -p 23231 localhost -t soft-serve
|
||
```
|
||
|
||
You can copy text to your clipboard over [SSH](../network/SSH.md). For instance, you can press c on the highlighted repo in the menu to copy the clone command.
|
||
|
||
## Hooks
|
||
Soft Serve supports git server-side hooks `pre-receive`, `update`, `post-update`, and `post-receive`. This means you can define your own hooks to run on repository push events. Hooks can be defined as a per-repository hook, and/or global hooks that run for all repositories.
|
||
|
||
You can find per-repository hooks under the repository `hooks` directory.
|
||
|
||
Globs hooks can be found in your `SOFT_SERVE_DATA_PATH` directory under `hooks`. Defining global hooks is useful if you want to run CI/CD for example.
|
||
|
||
Here's an example of sending a message after receiving a push event. Create an executable file `<data path>/hooks/update`:
|
||
|
||
```shell
|
||
#!/bin/sh
|
||
#
|
||
# An example hook script to echo information about the push
|
||
# and send it to the client.
|
||
|
||
refname="$1"
|
||
oldrev="$2"
|
||
newrev="$3"
|
||
|
||
# Safety check
|
||
if [ -z "$GIT_DIR" ]; then
|
||
echo "Don't run this script from the command line." >&2
|
||
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||
echo "usage: $0 <ref> <oldrev> <newrev>" >&2
|
||
exit 1
|
||
fi
|
||
|
||
# Check types
|
||
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
|
||
if [ "$newrev" = "$zero" ]; then
|
||
newrev_type=delete
|
||
else
|
||
newrev_type=$(git cat-file -t $newrev)
|
||
fi
|
||
|
||
echo "Hi from Soft Serve update hook!"
|
||
echo
|
||
echo "RefName: $refname"
|
||
echo "Change Type: $newrev_type"
|
||
echo "Old SHA1: $oldrev"
|
||
echo "New SHA1: $newrev"
|
||
|
||
exit 0
|
||
```
|
||
|
||
Now, you should get a message after pushing changes to any repository.
|
||
|
||
[SoftServe]: data:image/avif;base64,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
|