Releases: charmbracelet/soft-serve
v0.6.0
Git LFS Support
Soft Serve now supports Git LFS over both HTTP and SSH. You can upload/download LFS files on your Soft Serve instance. The SSH protocol is enabled by default. To use HTTP instead, you can disable the SSH protocol in the config under lfs.ssh_enabled
.
Collaborator Access Levels
You can now specify the access level for collaborators. Before, all repository collaborators would have read-write
access. Now you can have more fine control over repository collaborator access. If you don't specify an access level when adding a collaborator to a repository, read-write
access level will be used.
HTTP Authentication
Prior to this release, Soft Serve Git HTTP server would only serve public repositories and wouldn't allow push access. Now, you can use user access tokens to push repositories over HTTP. You can generate a personal token using the token
SSH command.
Postgres Support
We have added Postgres database support for those who need a more powerful database engine. SQLite is still the default database engine for Soft Serve. Head to Database Configuration for more information on how to set up Postgres for your Soft Serve instance.
Changelog
New Features
- 61ad744: feat(ssh): use custom logging middleware (@aymanbagabas)
- f69f064: feat(web): implement git auth and lfs (@aymanbagabas)
- 882e701: feat: add collaborators with access level (@aymanbagabas)
- af81aec: feat: add lfs config and tests (@aymanbagabas)
- 8e68dba: feat: implement git-lfs preliminary support (@aymanbagabas)
- c7829a3: feat: print clone url on repo create (@aymanbagabas)
- e0882cc: feat: store repo meta data in repo directory (#338) (@aymanbagabas)
- e4a47c5: feat: support git push options (#341) (@aymanbagabas)
- a9e5ace: feat: support user access tokens (@aymanbagabas)
- f1a1da5: feat: use gorilla/mux (@aymanbagabas)
Bug fixes
- c4dde1c: feat,fix: add task manager (@aymanbagabas)
- 7cd0583: fix(ci): golangci linter (@aymanbagabas)
- db3bc9b: fix(cmd): user info reporting false admin status (@aymanbagabas)
- bd8c60c: fix(lfs): don't timeout when searching lfs objects (@aymanbagabas)
- babc52f: fix(lfs): fetch missing lfs objects when mirroring (@aymanbagabas)
- 8d41446: fix(ssh): increase the default idle-timeout to 10 minutes (@aymanbagabas)
- fe70399: fix(tests): make git-daemon use random port (@aymanbagabas)
- e5f8b20: fix(tests): testscript race condition (@aymanbagabas)
- ea6b9a4: fix: add repo owner and separate lfs data for each repository (@aymanbagabas)
- 942d494: fix: add ssh commands back (#370) (@aymanbagabas)
- fd167be: fix: backend update hook arguments (@aymanbagabas)
- e10942e: fix: config paths on windows (@aymanbagabas)
- 8594ecf: fix: demo gif (#373) (@maaslalani)
- 02fd650: fix: disable codecov on push (@aymanbagabas)
- 1c781fe: fix: ignore case README filenames (@bashbunni)
- 050a0d1: fix: initial default branch name (#340) (@aymanbagabas)
- 969cf76: fix: metric cardinality et al (#315) (@caarlos0)
- b0eebaa: fix: panic on ssh lfs transfer (@aymanbagabas)
- 09dedc4: fix: remove extra metrics label (@aymanbagabas)
- da5bf4e: fix: remove repo when stat mismatch (@aymanbagabas)
- d0afaa0: fix: respect gitattributes (#342) (@aymanbagabas)
- 7c73084: fix: tests (@aymanbagabas)
- b26060b: refactor,fix(ssh): use cobra for git commands (@aymanbagabas)
Dependency updates
- ddb3bd6: feat(deps): bump github.com/charmbracelet/bubbles from 0.15.0 to 0.16.1 (@dependabot[bot])
- 940bde7: feat(deps): bump github.com/charmbracelet/bubbletea (@dependabot[bot])
- bf6b47f: feat(deps): bump github.com/charmbracelet/bubbletea (@dependabot[bot])
- 191b832: feat(deps): bump github.com/charmbracelet/keygen from 0.4.2 to 0.4.3 (@dependabot[bot])
- 62b9fda: feat(deps): bump github.com/charmbracelet/lipgloss from 0.7.1 to 0.8.0 (#372) (@dependabot[bot])
- 75cf8a5: feat(deps): bump github.com/charmbracelet/log (@dependabot[bot])
- 277bbc1: feat(deps): bump github.com/charmbracelet/log from 0.2.1 to 0.2.2 (@dependabot[bot])
- 104aa73: feat(deps): bump github.com/charmbracelet/log from 0.2.3 to 0.2.4 (#371) (@dependabot[bot])
- 1491acb: feat(deps): bump github.com/go-git/go-git/v5 from 5.6.1 to 5.7.0 (@dependabot[bot])
- e610867: feat(deps): bump github.com/go-git/go-git/v5 from 5.7.0 to 5.8.1 (@dependabot[bot])
- a12b45b: feat(deps): bump github.com/gogs/git-module from 1.8.2 to 1.8.3 (#365) (@dependabot[bot])
- c2a9b29: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.2 to 2.0.3 (@dependabot[bot])
- fa6deb4: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.3 to 2.0.4 (@dependabot[bot])
- bb94850: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.4 to 2.0.5 (@dependabot[bot])
- d1593cc: feat(deps): bump github.com/hashicorp/golang-lru/v2 from 2.0.5 to 2.0.6 (#374) (@dependabot[bot])
- f0eb762: feat(deps): bump github.com/lib/pq from 1.2.0 to 1.10.9 (#339) (@dependabot[bot])
- f147ff5: feat(deps): bump github.com/muesli/termenv from 0.15.1 to 0.15.2 (@dependabot[bot])
- 7b3f2c2: feat(deps): bump github.com/prometheus/client_golang (#325) (@dependabot[bot])
- d7fcf9d: feat(deps): bump github.com/rogpeppe/go-internal (@dependabot[bot])
- 0e9abaf: feat(deps): bump go.uber.org/automaxprocs from 1.5.2 to 1.5.3 (#343) (@dependabot[bot])
- 75172cf: feat(deps): bump golang.org/x/crypto from 0.10.0 to 0.11.0 (#335) (@dependabot[bot])
- 05ecf8d: feat(deps): bump golang.org/x/crypto from 0.11.0 to 0.12.0 (@dependabot[bot])
- 691f681: feat(deps): bump golang.org/x/crypto from 0.9.0 to 0.10.0 (#323) (@dependabot[bot])
- a72790a: feat(deps): bump golang.org/x/sync from 0.2.0 to 0.3.0 (@dependabot[bot])
- 6ce418b: feat(deps): bump modernc.org/sqlite from 1.22.1 to 1.23.0 (@dependabot[bot])
- 65de5ba: feat(deps): bump modernc.org/sqlite from 1.23.0 to 1.23.1 (@dependabot[bot])
- ad4231b: feat(deps): bump modernc.org/sqlite from 1.23.1 to 1.24.0 (#336) (@dependabot[bot])
- f52dcd2: feat(deps): bump modernc.org/sqlite from 1.24.0 to 1.25.0 (@dependabot[bot])
Documentation updates
- abcb242: Revert "docs: update soft-serve demo GIF / screencast" (@maaslalani)
- 0353cf2: docs: add sqlite foreign key note (@aymanbagabas)
- 49ec3aa: docs: update readme (#360) (@aymanbagabas)
- 0509a50: docs: update soft-serve demo GIF / screencast (@maaslalani)
Other work
- b60a7f2: Add commit command (#331) (@luandy64)
- e78725f: Smart HTTP Git transport & partial clones (#291) (#332) (@aymanbagabas)
- b3d5ce8: refactor: combine migrations into one (@aymanbagabas)
- e398b4d: refactor: implement database module and abstract backend (#337) (@aymanbagabas)
- 3a61783: refactor: move jobs into its own module (@aymanbagabas)
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/soft-serve/releases/download/0.6.0/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/soft-serve/releases/download/0.6.0/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/soft-serve/releases/download/0.6.0/checksums.txt.sig' \
./checksums.txt
If the ou...
v0.5.5
Changelog
Bug fixes
- fee41f4: fix: initial default branch name (@aymanbagabas)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.5.4
Changelog
New Features
- 9b8e183: feat: bump minimum go version to go1.20 (@aymanbagabas)
- cc951e3: feat: switch to env/v8 (@aymanbagabas)
Bug fixes
- fbe09a9: fix(ci): remove soft-serve workflow (@aymanbagabas)
- a9e4824: fix(server): possible panic using maps (@aymanbagabas)
- f851adb: fix(ssh): restrict publickey auth (@aymanbagabas)
Documentation updates
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.5.3
A bunch of bug fixes, performance improvements, and docs updates.
Setting the LogFormat
is now under log.format
in the yaml config instead of log_format
. You can still use SOFT_SERVE_LOG_FORMAT
. We also added a SOFT_SERVE_LOG_TIME_FORMAT
to change how the logs format time. The default time format is now includes date and time.
The Docker container now comes with OpenSSH installed for more compatibility.
Changelog
New Features
- 57df762: feat: log time format (#269) (@caarlos0)
- 9eda032: feat: upgrade dependencies (@aymanbagabas)
Bug fixes
- 5580b5b: fix(backend): cache repos in memory (#274) (@aymanbagabas)
- 469a86f: fix(backend): delete non-existing repo (@aymanbagabas)
- 6eba245: fix(backend): delete repo when importing existing one (@aymanbagabas)
- 4433e02: fix(backend): remove clone timeout (@aymanbagabas)
- 1420502: fix(backend): wrap i/o operations in transactions (#278) (@aymanbagabas)
- b07de74: fix(log): respect log config (#280) (@aymanbagabas)
- bb40f89: fix(server): bound the current context to the underlying operation (@aymanbagabas)
- 3ef6d86: fix(ui): UI regressions (#279) (@aymanbagabas)
- 2a97f93: fix: improve dockerfile caching (@caarlos0)
- 3cf9b6b: fix: increase clone timeout, fix some lint issues (@caarlos0)
- c1d62b5: fix: set CI=1 in Dockerfile as a workaround (#284) (@caarlos0)
Dependency updates
- cad243c: feat(deps): bump github.com/charmbracelet/bubbletea (@dependabot[bot])
- 44f52c1: feat(deps): bump github.com/prometheus/client_golang (@dependabot[bot])
- 8855f56: feat(deps): bump golang.org/x/crypto from 0.8.0 to 0.9.0 (@dependabot[bot])
Documentation updates
- 8d13e32: docs: add systemd instructions (#276) (@aymanbagabas)
- 882abd5: docs: update license (@caarlos0)
Other work
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.5.2
Changelog
Bug fixes
- c93630e: fix(server): wait for and ensure git command exits #262 (@aymanbagabas)
Dependency updates
- 4533243: feat(deps): bump golang.org/x/sync from 0.1.0 to 0.2.0 (@dependabot[bot])
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
Systemd Service, dependency upgrades, and bug fixes.
DEB and RPM now include default Systemd service files. It also creates a new soft-serve
user and tmpfiles
for running Soft Serve.
Upgrade dependencies.
Fix Soft Serve bash
dependency in packages and Docker image.
Changelog
New Features
- bdcc8fb: feat: package systemd unit (@caarlos0)
- 56bc308: feat: s/soft/soft-serve/; sysusers; tmpfiles (@caarlos0)
Bug fixes
- 0e3363c: fix(build): add bash to Dockerfile (@aymanbagabas)
- 2624e60: fix(nfpm): don't enable and start systemd service by default (@aymanbagabas)
- 12b410f: fix: format (@caarlos0)
Dependency updates
- 1e97e6e: feat(deps): bump github.com/prometheus/client_golang (@dependabot[bot])
- b9d6fbc: feat(deps): bump modernc.org/sqlite from 1.21.1 to 1.22.1 (@dependabot[bot])
Documentation updates
- 7dab80b: docs: update default server ports (@aymanbagabas)
Other work
v0.5.0
Soft Serve v0.5 is here!
This Soft Serve release includes many new features and bug fixes. Now, Soft Serve supports cloning over HTTP(s) and git:// protocols. It can also be used to import Go packages (go-import aware). It also brings preliminary CI/CD support through Git hooks.
Breaking Change
Soft Serve no longer uses a config
repository for configuration. Now, the configs are split into 2 parts, server config, and access config.
Configuration environment variables have changed:
SOFT_SERVE_INITIAL_ADMIN_KEY
is nowSOFT_SERVE_INITIAL_ADMIN_KEYS
.SOFT_SERVE_KEY_PATH
is nowSOFT_SERVE_SSH_KEY_PATH
.SOFT_SERVE_REPO_PATH
is replaced withSOFT_SERVE_DATA_PATH
. However,SOFT_SERVE_DATA_PATH
now points to the parent directory that holds all Soft Serve data and repositories.SOFT_SERVE_BIND_ADDRESS
is nowSOFT_SERVE_SSH_LISTEN_ADDR
.SOFT_SERVE_HOST
andSOFT_SERVE_PORT
are now combined intoSOFT_SERVE_SSH_PUBLIC_URL
. This should be in the form ofssh://HOST[:PORT]
All these environment variables, except SOFT_SERVE_DATA_PATH
, can be defined in config.yaml
. Defining environment variables settings will override the settings defined in config.yaml
.
Migration
You can use soft migrate-config
command to migrate the existing (old) config to the new one. First, make sure you define the following environment variables before running the command:
SOFT_SERVE_KEY_PATH
The path to the server host key.SOFT_SERVE_REPO_PATH
The path to the repository store directory.SOFT_SERVE_BIND_ADDRESS
The address that the server binds to.
By default, this will produce a new data
directory that has the migrated repositories and ssh keys. You can change that using the SOFT_SERVE_DATA_PATH
environment variable.
Server Configuration
The default Soft Serve backend uses SQLite to store access configs, users, and repository metadata. Custom backends can be implemented to support the old behavior (using a config repository).
The server config is stored in config.yaml
under the data
directory.
Access Configuration
Access configuration and users are now managed through the new SSH-based API. Admins can add/remove users using the user
command. Use the pubkey
command to manage user SSH public keys.
Other access configurations like anon-access
and allow-keyless
still exist and can be controlled using the settings
command. These two access settings control the behavior of users using http(s):// and git:// protocols and anonymous users.
Host your own Soft Serve instance
Check out our new post on hosting your own Soft Serve instance.
Issues
Please report any issues and bugs here.
Changelog
New Features
- 2a0d05a: feat(backend): add sqlite backend (@aymanbagabas)
- 0bff6ce: feat(backend): cache repos (@aymanbagabas)
- 4f07abf: feat(backend): collabs & admins interface (@aymanbagabas)
- 399c33e: feat(backend): create default admin user with initial admin keys (@aymanbagabas)
- 43ff02c: feat(backend): hide repository from ui (@aymanbagabas)
- 7da97b1: feat(backend): parse access level (@aymanbagabas)
- f38848d: feat(backend): repo defaultBranch setting & collabs path (@aymanbagabas)
- b6041ef: feat(backend): server backend (@aymanbagabas)
- 5ec5570: feat(backend): validate repo name (@aymanbagabas)
- 53ba263: feat(cmd): add collab & admin ssh cli api (@aymanbagabas)
- 0bfce9c: feat(cmd): add settings server command (@aymanbagabas)
- 0c86b0a: feat(cmd): migrate config command (@aymanbagabas)
- 82c4c60: feat(cmd): support custom hooks (@aymanbagabas)
- 9a80cdb: feat(config): store server config in file (@aymanbagabas)
- 27a5e47: feat(http): use tls keys when provided (@aymanbagabas)
- b957470: feat(log): add log module (@aymanbagabas)
- f819896: feat(log): initialize debug logger (@aymanbagabas)
- 227f178: feat(server): add git hooks (@aymanbagabas)
- ae9cc3e: feat(server): add prometheus stats server (@aymanbagabas)
- 6cd8ca6: feat(server): add pull mirror repos (@aymanbagabas)
- b9cc769: feat(server): add repo mirror & info commands (@aymanbagabas)
- 4277403: feat(server): add tree & blob server commands (@aymanbagabas)
- 468a99f: feat(server): create ssh client keypair (@aymanbagabas)
- 0c6cc32: feat(server): http server (@aymanbagabas)
- 4b148fb: feat(server): log initial admin keys (@aymanbagabas)
- ce5ab22: feat(server): rework git hooks and drop internal server (@aymanbagabas)
- c1cbb40: feat(server): ssh cli api and middleware (@aymanbagabas)
- 6efe531: feat(server): use a separate ssh server for internal commands (@aymanbagabas)
- 2366f90: feat(server): validate username (@aymanbagabas)
- 106c049: feat(ui): format clone url (@aymanbagabas)
- e47f988: feat(ui): navigate to top/botton of readme and files (@aymanbagabas)
- 5302c49: feat(ui): notify copied text (@aymanbagabas)
- e00b19d: feat(ui): use termenv to copy text to clipboard (@aymanbagabas)
- 7d5563b: feat: bump wish and keygen (@aymanbagabas)
- 0a89da1: feat: update readme (@aymanbagabas)
- 3d7eb7b: feat: use context (@aymanbagabas)
- f388af9: feat: use contexts and clean logging (@aymanbagabas)
- 7f3e304: refactor,feat: use soft serve backends, implement git & http servers, remove config repository, manage soft serve from ssh (#231) (@aymanbagabas)
Bug fixes
- 6d9fc69: fix(backend): always import bare repositories (@aymanbagabas)
- 4a52c1b: fix(backend): cache repo rename (@aymanbagabas)
- 64598e6: fix(backend): create renamed parent directory (@aymanbagabas)
- 99447bc: fix(backend): error when repository doesn't exist (@aymanbagabas)
- fb951a3: fix(backend): init repos and hooks (@aymanbagabas)
- bec3df0: fix(backend): list collabs (@aymanbagabas)
- df43bbb: fix(backend): make public key unique (@aymanbagabas)
- aa8fb74: fix(backend): private repos, description, and nested repos names (@aymanbagabas)
- 1bcdbc0: fix(backend): propagate errors (@aymanbagabas)
- d64549c: fix(backend): repo doesn't exist (@aymanbagabas)
- b9f4c77: fix(backend): settings query (@aymanbagabas)
- c5fa66a: fix(backend): use client ssh key to clone ssh repos (@aymanbagabas)
- 8131a22: fix(backend): use subdir collabs path (@aymanbagabas)
- 7948a2c: fix(ci): remove deprecated ifshort linter (@aymanbagabas)
- ee373fb: fix(cmd): add hidden option when importing a repository (@aymanbagabas)
- 4e67940: fix(cmd): conflicting initial admin user (@aymanbagabas)
- 4394217: fix(cmd): hide migrate-config command (@aymanbagabas)
- 6b2baa9: fix(cmd): omit ssh command line port when empty or 22 (@aymanbagabas)
- bdd8612: fix(config): don't use env default value for datapath (@aymanbagabas)
- 4727a5d: fix(config): mkdir before writing config (@aymanbagabas)
- 5513179: fix(config): parse initial admin keys paths (@aymanbagabas)
- fef6f9b: fix(config): reword key path (@aymanbagabas)
- 89e36f2: fix(config): server config tests (@aymanbagabas)
- 2203fe0: fix(config): use abs paths (@aymanbagabas)
- c59c9ff: fix(config): yaml notations (@aymanbagabas)
- 3dfecd9: fix(http): go-get requests (@aymanbagabas)
- 47410de: fix(http): handle nested git repos (@aymanbagabas)
- c0b9c0d: fix(http): index template html (@aymanbagabas)
- 91e9f37: fix(migrate): copy pub key (@aymanbagabas)
- 5d177f5: fix(server): InitialAdminKeys config name (@aymanbagabas)
- 5d8ff39: fix(server): add ssh command to usage (@aymanbagabas)
- 96ddc11: fix(server): add ssh commands for admin keys (@aymanbagabas)
- 5403d1...
v0.4.7
Changelog
New Features
- cba7b09: feat(log): upgrade charmbracelet/log to v0.2.0 (@aymanbagabas)
Bug fixes
- 02386ae: fix(ci): setup go before lint (@aymanbagabas)
- 5149978: fix(config): ignore repos with broken head ref (#236) (@aymanbagabas)
- 62c39b7: fix: update deps to fix CVE-2022-32149 (@aymanbagabas)
Dependency updates
- 6d9ad10: feat(deps): bump github.com/aymanbagabas/go-osc52 from 1.2.1 to 1.2.2 (@dependabot[bot])
- a39db5b: feat(deps): bump github.com/charmbracelet/bubbles from 0.14.0 to 0.15.0 (@dependabot[bot])
- 340afde: feat(deps): bump github.com/charmbracelet/glamour (@dependabot[bot])
- 2e15fb8: feat(deps): bump github.com/charmbracelet/lipgloss from 0.6.0 to 0.7.1 (@dependabot[bot])
- e7a955f: feat(deps): bump github.com/charmbracelet/log from 0.2.0 to 0.2.1 (@dependabot[bot])
- c211f43: feat(deps): bump github.com/dustin/go-humanize from 1.0.0 to 1.0.1 (@dependabot[bot])
- 8c7466c: feat(deps): bump github.com/go-git/go-git/v5 from 5.4.2 to 5.6.1 (@dependabot[bot])
- b219276: feat(deps): bump github.com/gogs/git-module from 1.7.1 to 1.8.1 (@dependabot[bot])
- 1e5989e: feat(deps): bump github.com/matryer/is from 1.4.0 to 1.4.1 (@dependabot[bot])
- 395a060: feat(deps): bump golang.org/x/crypto from 0.6.0 to 0.7.0 (@dependabot[bot])
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.4.6
Changelog
New Features
- eafb45f: feat(cfg): debug logging environment variable (@aymanbagabas)
Bug fixes
- be76262: fix(server): session race test (@aymanbagabas)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.4.5
Changelog
Bug fixes
- f227b4c: fix(go): remove go.mod exclude directives (@aymanbagabas)
Dependency updates
- 7cfe48d: feat(deps): bump github.com/go-git/go-billy/v5 from 5.3.1 to 5.4.0 (@dependabot[bot])
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.