Commit log

6f26099 wip

Ayman Bagabas created

8fbd41a feat: add user email support

Ayman Bagabas created

caca389 feat: initial orgs & teams support

Click to expand commit body
Squashed commit of the following:

commit 26d3df790c79a0803033ba71b7c394a27c401f1e
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Thu Nov 30 10:33:32 2023 -0800

    feat: add team collaborators (#19)

    Repository collaborators can be either individual users, or organization
    teams. When it's an org team, the repo must belong to the same
    organization that the team belongs to. This validation happens in the
    app logic.

commit 8a598a1898228432114d81d158eb25578b112353
Merge: 9399cd6a60f9 5ae66bc932bd
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Tue Nov 14 09:37:42 2023 -0300

    Merge pull request #15 from charmbracelet/orgs

    feat: initial organization support

commit 5ae66bc932bde406b994877c7c32def5115d9afc
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Tue Nov 14 10:06:20 2023 +0000

    fix: code review

    Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

commit 4d16aecedec8b1a46ee1ea73c2d1cc4b51f0ebd1
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Mon Nov 13 18:55:04 2023 +0000

    wip team

commit 3374c8cd24f3c03188cf1f9e27b9242fd9df00a1
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Mon Nov 13 17:15:54 2023 +0000

    wip team

commit 890975daab842cab7207d68535c7ed5e2dec98c7
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Mon Nov 13 15:59:22 2023 +0000

    wip teams

commit d67773949c1ca93ca392d156241f9f166e471723
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Mon Nov 13 15:44:33 2023 +0000

    fix: team signatures

commit b3881958409bd98bc8861f4048826e9efaca7b6d
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Mon Nov 13 15:44:26 2023 +0000

    fix: rename method

commit 509585f7c6444e0a0106d1100204bee0ee65e70f
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Mon Nov 13 12:32:03 2023 +0000

    wip

commit ab0124e25c12cf2d6c8d75f793ac80a236bbbe82
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 20:47:15 2023 +0000

    fix: cr

commit 3e6de9b54dbb4d0cefe3891f424976c760c39ee3
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 20:44:46 2023 +0000

    fixes

commit 452815ea7231b3d362b95ea7ab2149492862974a
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 20:37:44 2023 +0000

    wip

commit aa25e4fc40104c9c390b2d69eb4fc33128938074
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 20:35:39 2023 +0000

    wip

commit 28241cc64e57b2b3a30ed6897b1156a88965e99b
Merge: 12a70b3e5e0c 9399cd6a60f9
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 20:33:30 2023 +0000

    Merge remote-tracking branch 'origin/orgs-teams' into orgs

commit 9399cd6a60f9d3a6e6bf95aa4bb454161944c540
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Thu Nov 9 12:22:02 2023 -0500

    feat: add email user relations and models

commit a0715c42d628528292501591c6b5764a5ee80ff8
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Thu Nov 9 10:08:23 2023 -0500

    fix: carlos comments

commit 12a70b3e5e0cc625dd48511d035e632b551fd05b
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 13:40:37 2023 +0000

    fix: admin

commit 637c8bccd6877e3447a9e1f6f13e1a1105a3616f
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 12:57:01 2023 +0000

    wip

commit 4ec7653f4ba6fed4faee21f8416d2dbbe46ef3d3
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 12:32:46 2023 +0000

    fix: merge issues

commit d8b8e22f98f5700d84d599e9a0483ab1d0572497
Merge: c2bf2721d2d0 777e451128b1
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 12:27:26 2023 +0000

    Merge remote-tracking branch 'origin/orgs-teams' into orgs

commit c2bf2721d2d0b17e4cfa2cc1a45d9a21cf4197fd
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 02:25:19 2023 +0000

    wip

commit 92b5f57ec09a013b051dd6828dd1beb4ed95d641
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Thu Nov 9 02:10:37 2023 +0000

    wip

commit 83f6cf906a5779168706277ec37e3bb84578b55b
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Wed Nov 8 19:42:02 2023 +0000

    wip

commit 777e451128b141304341e6497d6a96a6f4185f3a
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Wed Nov 8 12:56:25 2023 -0500

    fix: lint

commit 50f2b054550489bf8df81a96f553764096734c89
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Wed Nov 8 12:53:24 2023 -0500

    feat: add models and missing columns

commit 84cb5889d269b135ed3e9ad1dbb660a6e562041f
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Wed Nov 8 12:39:44 2023 -0500

    fix(backend): update backend to use handles table

commit af16adab439e5905704be986e32be48ef85d2846
Author: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Date:   Wed Nov 8 17:34:18 2023 +0000

    wip: adding orgs

commit a222f24860f25c25f92aacbe1d96294cb7d8627c
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Wed Nov 8 07:33:06 2023 -0800

    Add organizations and teams migration (#9)

    * feat(db): pre/post migration

    * feat(db): add create orgs/teams migration

commit f7f521e9bff1efedd30be27acfde31137070bac5
Author: Ayman Bagabas <ayman.bagabas@gmail.com>
Date:   Tue Nov 7 16:44:09 2023 -0500

    wip

Ayman Bagabas created

c3915b2 feat: run test coverage against postgres

Ayman Bagabas created

fc81914 feat: add ssh lfs-transfer tests

Ayman Bagabas created

e02c00f feat(tests): add a testcase for `soft man`

Ayman Bagabas created

a985ccd feat: test ssh ui output

Click to expand commit body
Still wip

wip

feat(tests): run against ssh ui

Ayman Bagabas created

cd964a6 feat(deps): bump github.com/go-git/go-git/v5 from 5.10.1 to 5.11.0

Click to expand commit body
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.10.1 to 5.11.0.
- [Release notes](https://github.com/go-git/go-git/releases)
- [Commits](https://github.com/go-git/go-git/compare/v5.10.1...v5.11.0)

---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

dependabot[bot] created

45ce909 feat(deps): bump github.com/golang-jwt/jwt/v5 from 5.1.0 to 5.2.0 (#437)

Click to expand commit body
Bumps [github.com/golang-jwt/jwt/v5](https://github.com/golang-jwt/jwt) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/golang-jwt/jwt/releases)
- [Changelog](https://github.com/golang-jwt/jwt/blob/main/VERSION_HISTORY.md)
- [Commits](https://github.com/golang-jwt/jwt/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: github.com/golang-jwt/jwt/v5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

40d76a1 feat: update integration tests (#434)

Click to expand commit body
* feat: add more unittests

* fix(tests): use the soft binary to run integration tests

* fix(ci): upload coverage data

* fix: daemon test idle timeout

* fix: daemon flaky test

* chore: add more webhook unit tests

* fix(test): enable webhook integration tests

* fix(tests): readd sync lock

* fix(ci): collect coverage for both unit and integration tests

* fix(ci): coverage test

* fix(ci): remove macos and windows

* fix: return the opened logger file

* fix: daemon idle test

* fix: testscript on windows

* fix: run soft-serve in txtar background

* fix(ci): collecting coverage data

* fix: coverage data

* fix: remove unused

* fix: add browse test

* feat: add stop server endpoint

* fix(tests): run integration tests on windows

* fix(tests): skip daemon idle timeout flaky test

* fix(tests): attempt to fix daemon idle test

Ayman Bagabas created

d483565 chore(deps): bump actions/setup-go from 4 to 5 (#439)

Click to expand commit body
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

e419a93 fix(ui): go back on esc

Click to expand commit body
Fixes: https://github.com/charmbracelet/soft-serve/issues/415

Ayman Bagabas created

fa23c9c fix(ui): dry glamour chroma renderer

Ayman Bagabas created

0a38578 fix(ui): hide clone command while browse only

Ayman Bagabas created

812d840 fix(ui): render about page using glamour

Click to expand commit body
Fixes: https://github.com/charmbracelet/soft-serve/issues/435

Ayman Bagabas created

bac2ff3 build: avoid duplicated CI runs (#433)

Carlos Alexandro Becker created

fc2c62f fix(daemon): timeout test

Ayman Bagabas created

178b9d5 fix(daemon): tests after upgrading go-git

Ayman Bagabas created

0ec24e3 feat(deps): bump github.com/go-git/go-git/v5 from 5.10.0 to 5.10.1 (#429)

Click to expand commit body
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/go-git/go-git/releases)
- [Commits](https://github.com/go-git/go-git/compare/v5.10.0...v5.10.1)

---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

8e5966a feat(deps): bump golang.org/x/crypto from 0.15.0 to 0.16.0 (#430)

Click to expand commit body
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.15.0 to 0.16.0.
- [Commits](https://github.com/golang/crypto/compare/v0.15.0...v0.16.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

4ccd373 feat(deps): bump github.com/charmbracelet/log from 0.3.0 to 0.3.1 (#431)

Click to expand commit body
Bumps [github.com/charmbracelet/log](https://github.com/charmbracelet/log) from 0.3.0 to 0.3.1.
- [Release notes](https://github.com/charmbracelet/log/releases)
- [Commits](https://github.com/charmbracelet/log/compare/v0.3.0...v0.3.1)

---
updated-dependencies:
- dependency-name: github.com/charmbracelet/log
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

63786d0 fix(web): superfluous write

Ayman Bagabas created

e0148ca fix(http): times out on large repositories (#428)

Click to expand commit body
This was due to having a _set_ value of Read/Write http server timeout
values, and a faulty git gzip request handler. The server drops the
connection if there wasn't any read/write within 10 seconds.

Replace the read/write timeouts with idle timeout which will reset the
counter to _either_ read/write within 10 seconds. Idle timeout is only
used when keep-alive is enabled. That is the case by default.

Fix git by properly handling gzip and buffered git service responses.

Improve git http handler logging

Fixes: https://github.com/charmbracelet/soft-serve/issues/427

Ayman Bagabas created

71d2cd0 feat(deps): bump golang.org/x/crypto from 0.14.0 to 0.15.0 (#425)

dependabot[bot] created

e6713ba feat(deps): bump github.com/go-jose/go-jose/v3 from 3.0.0 to 3.0.1 (#423)

Click to expand commit body
Bumps [github.com/go-jose/go-jose/v3](https://github.com/go-jose/go-jose) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/go-jose/go-jose/releases)
- [Changelog](https://github.com/go-jose/go-jose/blob/v3/CHANGELOG.md)
- [Commits](https://github.com/go-jose/go-jose/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: github.com/go-jose/go-jose/v3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

ccb46a4 feat(deps): bump github.com/golang-jwt/jwt/v5 from 5.0.0 to 5.1.0 (#422)

Click to expand commit body
Bumps [github.com/golang-jwt/jwt/v5](https://github.com/golang-jwt/jwt) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/golang-jwt/jwt/releases)
- [Changelog](https://github.com/golang-jwt/jwt/blob/main/VERSION_HISTORY.md)
- [Commits](https://github.com/golang-jwt/jwt/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: github.com/golang-jwt/jwt/v5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

49f34dd feat(deps): bump github.com/charmbracelet/log from 0.2.5 to 0.3.0 (#424)

Click to expand commit body
Bumps [github.com/charmbracelet/log](https://github.com/charmbracelet/log) from 0.2.5 to 0.3.0.
- [Release notes](https://github.com/charmbracelet/log/releases)
- [Commits](https://github.com/charmbracelet/log/compare/v0.2.5...v0.3.0)

---
updated-dependencies:
- dependency-name: github.com/charmbracelet/log
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

6dc3c59 fix: lint issues

Ayman Bagabas created

d5e81ad feat(deps): bump golang.org/x/sync from 0.4.0 to 0.5.0 (#420)

Click to expand commit body
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.4.0 to 0.5.0.
- [Commits](https://github.com/golang/sync/compare/v0.4.0...v0.5.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

40423e8 feat(deps): bump github.com/gorilla/handlers from 1.5.1 to 1.5.2 (#419)

Click to expand commit body
Bumps [github.com/gorilla/handlers](https://github.com/gorilla/handlers) from 1.5.1 to 1.5.2.
- [Release notes](https://github.com/gorilla/handlers/releases)
- [Commits](https://github.com/gorilla/handlers/compare/v1.5.1...v1.5.2)

---
updated-dependencies:
- dependency-name: github.com/gorilla/handlers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

fabeb84 feat(deps): bump github.com/gorilla/mux from 1.8.0 to 1.8.1 (#417)

Click to expand commit body
Bumps [github.com/gorilla/mux](https://github.com/gorilla/mux) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/gorilla/mux/releases)
- [Commits](https://github.com/gorilla/mux/compare/v1.8.0...v1.8.1)

---
updated-dependencies:
- dependency-name: github.com/gorilla/mux
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

b5fa038 feat(deps): bump github.com/spf13/cobra from 1.7.0 to 1.8.0 (#418)

Click to expand commit body
Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.7.0 to 1.8.0.
- [Release notes](https://github.com/spf13/cobra/releases)
- [Commits](https://github.com/spf13/cobra/compare/v1.7.0...v1.8.0)

---
updated-dependencies:
- dependency-name: github.com/spf13/cobra
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

1383d18 feat(deps): bump modernc.org/sqlite from 1.26.0 to 1.27.0 (#416)

Click to expand commit body
Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.26.0 to 1.27.0.
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.26.0...v1.27.0)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created

03ba1ab fix(gomod): use git-module fork

Ayman Bagabas created

139be67 doc: update readme (#413)

Ayman Bagabas created

56a17a3 feat(ui): show committer in blame

Ayman Bagabas created

29de922 feat: update to latest env (#412)

Click to expand commit body
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Carlos Alexandro Becker created

f76ae7a fix(config): add jobs default config

Click to expand commit body
Fixes: e2e79feb09b7 (feat: job config (#402))

Ayman Bagabas created

f915f4d refactor,fix: add rename lfs objects migration (#409)

Click to expand commit body
* refactor,fix: add rename lfs objects migration

Rename lfs objects from OID[:2]/OID[2:4]/OID[4:] to OID[:2]/OID[2:4]/OID
to follow specs https://github.com/git-lfs/git-lfs/blob/main/docs/spec.md#intercepting-git

* fix: disable pure ssh lfs by default

Ayman Bagabas created

0f41cab refactor: rename pkgs (#408)

Ayman Bagabas created

a735362 feat(deps): bump github.com/charmbracelet/wish from 1.1.1 to 1.2.0 (#407)

dependabot[bot] created

7ec3a38 feat(deps): bump github.com/google/uuid from 1.3.1 to 1.4.0 (#406)

dependabot[bot] created

e319131 feat(deps): bump github.com/go-git/go-git/v5 from 5.9.0 to 5.10.0 (#404)

dependabot[bot] created

5852219 feat(deps): bump github.com/google/uuid from 1.3.0 to 1.3.1 (#405)

dependabot[bot] created

e2e79fe feat: job config (#402)

Click to expand commit body
* feat: job config

Signed-off-by: jolheiser <john.olheiser@gmail.com>

* docs: add new config to readme

Signed-off-by: jolheiser <john.olheiser@gmail.com>

* style: appease linter

Signed-off-by: jolheiser <john.olheiser@gmail.com>

* review(aymanbagabas): add jobs to default config file template

Signed-off-by: jolheiser <john.olheiser@gmail.com>

---------

Signed-off-by: jolheiser <john.olheiser@gmail.com>

John Olheiser created

0846323 Repository webhooks (#375)

Click to expand commit body
* feat: export server version

* fix: move db driver imports to db package

* feat: implement server webhooks

- branch/tag events
- collaborators events
- push events
- repository events

- [x] Implement database logic
- [x] Add database migrations
- [x] Implement webhooks logic
- [x] Integrate webhooks with backend
- [x] Implement repository webhooks SSH command interface
- [x] Implement webhook deliveries listing

Fixes: https://github.com/charmbracelet/soft-serve/issues/148
Fixes: https://github.com/charmbracelet/soft-serve/pull/56
Fixes: https://github.com/charmbracelet/soft-serve/issues/49

* wip

* fix: remove unnecessary webhook events

* fix(db): postgres migration script

* fix(db): use returning instead of LastInsertId

* fix(webhook): limit the number of push commits to 20

* fix(webhook): rename html_url to http_url

* fix(http): return 404 when repository on go-get not found

Ayman Bagabas created

02e1617 feat: browse local repositories (#369)

Click to expand commit body
* feat: browse local repositories

* refactor(ui): resolve race conditions and clean up code

* feat(ui): update readme based on selected reference

* feat(ui): add branch/tag commit date and hash

Fixes: https://github.com/charmbracelet/soft-serve/issues/382

* fix(ui): clean up statusbar logic

* fix(ui): cleanup statusbar and misc msgs

* fix(ui): preserve header line when no description is available

* fix(ui): match readme and list missing items styles

* fix(ui): header height calculation

Fixes: 43b4331f88ff (fix(ui): preserve header line when no description is available)

* fix(ui): truncate refitem msg

Fixes: fd0240995004 (feat(ui): add branch/tag commit date and hash)

* fix(ui): dry code line number and highlight formatting

* feat(ui): add blame file view

Fixes: https://github.com/charmbracelet/soft-serve/issues/149

* fix: lint errors

* fix(ui): NaN floats, analyse file content, and start spinner

* feat(ui): use right mouse click to go back in the files tab

* fix(ui): display "1" when there's only one page to display

* feat(ui): add stash view

Display repository stashed items

* feat: run browse on "soft"

Ayman Bagabas created

5df79ee feat(deps): bump golang.org/x/sync from 0.3.0 to 0.4.0 (#395)

dependabot[bot] created

6662e1a feat(deps): bump golang.org/x/net from 0.15.0 to 0.17.0 (#400)

dependabot[bot] created

da50842 feat(deps): bump github.com/charmbracelet/keygen from 0.4.3 to 0.5.0 (#398)

Click to expand commit body
Bumps [github.com/charmbracelet/keygen](https://github.com/charmbracelet/keygen) from 0.4.3 to 0.5.0.
- [Release notes](https://github.com/charmbracelet/keygen/releases)
- [Commits](https://github.com/charmbracelet/keygen/compare/v0.4.3...v0.5.0)

---
updated-dependencies:
- dependency-name: github.com/charmbracelet/keygen
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

dependabot[bot] and dependabot[bot] created