Skip to content

Commit a5f7b8d

Browse files
committed
Prepare GitGhost 1.0.0 release: bug fixes, packaging, CI/CD
- Fix repo name extraction bug in init (rstrip issue) - Improve save command robustness for empty repos - Add pyproject.toml with CLI entry point for packaging - Update requirements.txt with dev and release dependencies - Create unified GitHub Actions workflow (ci.yml) for test/build/publish - Build and test PyPI package locally - Document release process and automate PyPI publishing on tags
1 parent 0721278 commit a5f7b8d

File tree

13 files changed

+283
-202
lines changed

13 files changed

+283
-202
lines changed

.coveragerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[run]
22
branch = True
3-
source = gitvault
3+
source = gitghost
44
omit =
55
*/tests/*
66
*/.venv/*

.github/workflows/ci.yml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# GitHub Actions CI workflow for GitGhost CLI
2+
# This workflow runs tests, checks coverage, builds, and publishes to PyPI on version tags.
3+
4+
name: CI for GitGhost CLI
5+
6+
on:
7+
push:
8+
branches: ["**"]
9+
tags:
10+
- "v*"
11+
pull_request:
12+
branches: ["**"]
13+
14+
jobs:
15+
build-test:
16+
name: Test and Build on Python ${{ matrix.python-version }}
17+
runs-on: ubuntu-latest
18+
19+
strategy:
20+
matrix:
21+
python-version: ["3.10", "3.11", "3.12", "3.13"]
22+
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
27+
- name: Set up Python ${{ matrix.python-version }}
28+
uses: actions/setup-python@v5
29+
with:
30+
python-version: ${{ matrix.python-version }}
31+
32+
- name: Upgrade pip
33+
run: python -m pip install --upgrade pip
34+
35+
- name: Install dependencies
36+
run: |
37+
pip install --upgrade pip
38+
pip install -r requirements.txt
39+
40+
- name: Run tests with coverage
41+
run: |
42+
coverage run -m pytest
43+
coverage report
44+
coverage html
45+
46+
- name: Upload coverage report artifact
47+
uses: actions/upload-artifact@v4
48+
with:
49+
name: htmlcov-${{ matrix.python-version }}
50+
path: htmlcov
51+
52+
- name: Build package
53+
run: python -m build
54+
55+
publish:
56+
name: Build and Publish to PyPI
57+
needs: build-test
58+
runs-on: ubuntu-latest
59+
if: startsWith(github.ref, 'refs/tags/v')
60+
61+
steps:
62+
- uses: actions/checkout@v4
63+
64+
- name: Set up Python
65+
uses: actions/setup-python@v5
66+
with:
67+
python-version: "3.10"
68+
69+
- name: Install build tools
70+
run: |
71+
pip install --upgrade pip build twine
72+
73+
- name: Build package
74+
run: python -m build
75+
76+
- name: Publish to PyPI
77+
env:
78+
TWINE_USERNAME: __token__
79+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
80+
run: twine upload dist/*

.github/workflows/test.yml

Lines changed: 0 additions & 36 deletions
This file was deleted.

.gitignore

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ memory-bank/
179179
# Roomodes
180180
.roomodes
181181

182-
# GitVault
183-
.gitvault_private/
184-
.gitvaultinclude
182+
# GitGhost
183+
.gitghost_private/
184+
.gitghostinclude
185185

186186
# VS Code
187187
.vscode/

README.md

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,83 @@
1-
# GitVault
1+
# GitGhost
22

3-
A simple way to keep your private files safe while sharing your code with the world.
3+
A simple CLI tool to securely manage private files and folders ignored in your public Git repositories.
44

55
---
66

7-
## Overview
7+
## Why use GitGhost?
88

9-
GitVault helps you **manage sensitive files and folders** that you don’t want in your public Git repo. It lets you back up and version those private files in a separate, secure repo — so you get the best of both worlds.
9+
- **Keep sensitive files private:** Manage secrets, configs, or personal files outside your public repo.
10+
- **Seamless Git integration:** Works alongside your existing Git workflow.
11+
- **Simple commands:** Easily save, check status, or discard private changes.
12+
- **Separate private repo:** Keeps your private data secure and versioned.
13+
- **Cross-platform:** Designed for Linux, works on any system with Python 3.10+.
1014

1115
---
1216

13-
## What it does
17+
## Requirements
1418

15-
- Use a `.gitvaultinclude` file to list private stuff you want to track (which should also be in `.gitignore`)
16-
- `gitvault init` sets up GitVault in your project, creating the private repo and config files
17-
- `gitvault status` shows what’s changed in your private files since your last save
18-
- `gitvault save` commits and pushes those private changes to your private repo
19-
- `gitvault discard` lets you throw away private changes you don’t want to keep
20-
- Keeps secrets out of your public repo, no surprises
21-
- Manual control — **you decide when to save, discard, or check**
19+
- **Python 3.10 or higher**
20+
- Compatible with Ubuntu/Linux systems
21+
- An existing Git repository
2222

2323
---
2424

25-
## How to use it
26-
27-
1. **Initialize GitVault**
25+
## Installation
2826

29-
Run this once in your repo to set things up:
27+
Install GitGhost directly from PyPI:
3028

3129
```bash
32-
gitvault init
30+
pip install gitghost
3331
```
3432

35-
2. **List your private files**
33+
---
34+
35+
## Quick Start
3636

37-
Create a `.gitvaultinclude` file with paths to your private files or folders (make sure they’re also in `.gitignore`):
37+
Initialize GitGhost in your project:
3838

39-
```
40-
secrets.env
41-
private_notes/
42-
config/dev.yaml
39+
```bash
40+
gitghost init
4341
```
4442

45-
3. **See what’s changed**
43+
Check status of private files:
4644

4745
```bash
48-
gitvault status
46+
gitghost status
4947
```
5048

51-
4. **Save your private changes**
49+
Save private changes:
5250

5351
```bash
54-
gitvault save
52+
gitghost save
5553
```
5654

57-
5. **Discard private changes you don’t want**
55+
Discard private changes:
5856

5957
```bash
60-
gitvault discard
58+
gitghost discard
6159
```
6260

63-
That’s it — your sensitive stuff is safely versioned, but never exposed.
64-
6561
---
6662

67-
## Installation
68-
69-
_Coming soon on PyPI!_
70-
For now, just clone this repo and install the dependencies:
63+
## How it works
7164

72-
```bash
73-
pip install -r requirements.txt
74-
```
65+
- Specify private files/folders in `.gitghostinclude` (which should also be in `.gitignore`).
66+
- GitGhost manages a **separate private repository** for these files.
67+
- `gitghost save` commits and pushes private changes.
68+
- `gitghost status` shows private file changes.
69+
- Keeps private data out of your public repo, but safely versioned.
7570

7671
---
7772

78-
## Contributing
73+
## Links
7974

80-
Ideas, bugs, or want to help out?
81-
Pull requests are welcome! Or just open an issue and let’s chat.
75+
- **PyPI:** (Coming soon)
76+
- **Source Code:** [https://github.com/decodingchris/gitghost](https://github.com/decodingchris/gitghost)
77+
- **Issue Tracker:** [https://github.com/decodingchris/gitghost/issues](https://github.com/decodingchris/gitghost/issues)
8278

8379
---
8480

8581
## License
8682

87-
MIT License
83+
This project is licensed under the **MIT License**. See the [LICENSE](https://opensource.org/licenses/MIT) file for details.

gitghost/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# GitGhost package init

0 commit comments

Comments
 (0)