Skip to content

Commit a19cd89

Browse files
authored
Merge pull request #62 from fulll/feat/tui-visual-overhaul-and-community-files
feat: TUI visual overhaul, community files and demo animation (v1.4.0)
2 parents 24c427c + 1dcccb1 commit a19cd89

18 files changed

Lines changed: 829 additions & 32 deletions
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
---
2+
applyTo: "**"
3+
excludeAgent: "code-review"
4+
---
5+
6+
# Release — instructions for Copilot coding agent
7+
8+
Follow these steps when cutting a new release of `github-code-search`.
9+
10+
## 1. Determine the version bump
11+
12+
This project follows [Semantic Versioning](https://semver.org/):
13+
14+
| Change type | Bump | Example |
15+
| ---------------------------------------------- | ------- | ------------- |
16+
| Bug fix only (no new behaviour, no API change) | `patch` | 1.2.4 → 1.2.5 |
17+
| New feature, backward-compatible | `minor` | 1.2.4 → 1.3.0 |
18+
| Breaking change (CLI flag removed/renamed) | `major` | 1.2.4 → 2.0.0 |
19+
20+
## 2. Bump the version
21+
22+
```bash
23+
bun pm version patch # or minor / major
24+
```
25+
26+
If the working tree is dirty (staged or unstaged changes), `bun pm version` will refuse. In that case bump directly in `package.json`, then commit the version bump as the first commit on the release branch.
27+
28+
## 3. Write the blog post
29+
30+
**Required for minor and major releases. Optional (but encouraged) for patch releases.**
31+
32+
1. Create `docs/blog/release-v<X-Y-Z>.md` — use existing posts as format reference:
33+
- `docs/blog/release-v1-3-0.md` (minor, feature-focused)
34+
- `docs/blog/release-v1-4-0.md` (minor, TUI/community-focused)
35+
- Front-matter: `title`, `description`, `date` (ISO 8601).
36+
- Structure: `## Highlights` → one `###` section per major change group → `## Upgrade` at the bottom.
37+
- The upgrade section must include the `github-code-search upgrade` command and a link to the GitHub Releases page.
38+
39+
2. Update `docs/blog/index.md` — prepend a row to the `## v1 series` table:
40+
41+
```markdown
42+
| [vX.Y.Z](./release-vX-Y-Z) | One-line summary of highlights |
43+
```
44+
45+
3. Update `CHANGELOG.md` — update (or add) the matching row in the table:
46+
```markdown
47+
| [vX.Y.Z](https://fulll.github.io/github-code-search/blog/release-vX-Y-Z) | One-line summary |
48+
```
49+
Never leave a row with `_pending_` in `CHANGELOG.md` when cutting the release.
50+
51+
## 4. Create the release branch and commit
52+
53+
```bash
54+
VERSION=$(jq -r .version package.json)
55+
git checkout -b release/$VERSION
56+
git add package.json docs/blog/release-v*.md docs/blog/index.md CHANGELOG.md
57+
git commit -S -m "v$VERSION"
58+
```
59+
60+
> **All commits must be signed** — use `git commit -S` or `git config --global commit.gpgsign true`.
61+
62+
## 5. Tag and push
63+
64+
```bash
65+
VERSION=$(jq -r .version package.json)
66+
git tag v$VERSION
67+
git push origin release/$VERSION --tags
68+
```
69+
70+
The tag push triggers **`cd.yaml`**:
71+
72+
1. Builds self-contained binaries for all six targets.
73+
2. Creates a GitHub Release with all binaries attached.
74+
3. For major tags (`vX.0.0`): triggers `docs.yml` → docs snapshot + `versions.json` update.
75+
76+
Do **not** create the GitHub Release manually — the CD pipeline handles it.
77+
78+
## 6. Required validation before tagging
79+
80+
```bash
81+
bun test # full suite green
82+
bun run lint # oxlint — zero errors
83+
bun run format:check # oxfmt — no diff
84+
bun run knip # no unused exports
85+
bun run build.ts # binary compiles
86+
```
87+
88+
## 7. Post-release checklist
89+
90+
- [ ] GitHub Release created automatically by CD pipeline (verify within ~5 min after tag push)
91+
- [ ] Blog post live at `https://fulll.github.io/github-code-search/blog/release-vX-Y-Z`
92+
- [ ] `bun run docs:build` succeeds locally (spot-check the new blog entry)
93+
- [ ] `CHANGELOG.md` has no `_pending_` entries
94+
- [ ] For **major** releases: versioned docs snapshot available at `/github-code-search/vX/`
95+
96+
## 8. Module map — what to document per release type
97+
98+
| Changed area | Cover in the blog post |
99+
| ------------------------- | --------------------------------------------------------------- |
100+
| `src/tui.ts` | UX / interaction changes (keyboard shortcuts, new modes) |
101+
| `src/render/` | Visual changes (colours, layout, new components) |
102+
| `src/aggregate.ts` | New filter or exclusion options |
103+
| `src/group.ts` | Team-grouping behaviour changes |
104+
| `src/output.ts` | New output formats or structural changes to existing ones |
105+
| `src/api.ts` | New GitHub API features, pagination changes, scope requirements |
106+
| `src/upgrade.ts` | Upgrade command improvements |
107+
| `github-code-search.ts` | New CLI flags, subcommands, breaking option renames |
108+
| Community / project files | SECURITY, CODE_OF_CONDUCT, CONTRIBUTING changes worth surfacing |

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Changelog
2+
3+
Release notes and changelogs are published on the **[project blog](https://fulll.github.io/github-code-search/blog/)**.
4+
5+
Each release entry covers the motivation, new features, breaking changes (if any), and upgrade notes.
6+
7+
| Version | Blog post |
8+
| ------------------------------------------------------------------------ | ---------------------------------------------------- |
9+
| [v1.4.0](https://fulll.github.io/github-code-search/blog/release-v1-4-0) | TUI visual overhaul, community files, demo animation |
10+
| [v1.3.0](https://fulll.github.io/github-code-search/blog/release-v1-3-0) | Team-prefix grouping, replay command, JSON output |
11+
| [v1.0.0](https://fulll.github.io/github-code-search/blog/release-v1-0-0) | Initial release |
12+
13+
> For the full list of commits between releases, see the
14+
> [GitHub Releases page](https://github.com/fulll/github-code-search/releases).

CODE_OF_CONDUCT.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, caste, color, religion, or sexual
10+
identity and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
- Demonstrating empathy and kindness toward other people
21+
- Being respectful of differing opinions, viewpoints, and experiences
22+
- Giving and gracefully accepting constructive feedback
23+
- Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
- Focusing on what is best not just for us as individuals, but for the overall
26+
community
27+
28+
Examples of unacceptable behavior include:
29+
30+
- The use of sexualized language or imagery, and sexual attention or advances of
31+
any kind
32+
- Trolling, insulting or derogatory comments, and personal or political attacks
33+
- Public or private harassment
34+
- Publishing others' private information, such as a physical or email address,
35+
without their explicit permission
36+
- Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official email address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at
63+
[admin@fulll.fr](mailto:admin@fulll.fr).
64+
All complaints will be reviewed and investigated promptly and fairly.
65+
66+
All community leaders are obligated to respect the privacy and security of the
67+
reporter of any incident.
68+
69+
## Enforcement Guidelines
70+
71+
Community leaders will follow these Community Impact Guidelines in determining
72+
the consequences for any action they deem in violation of this Code of Conduct:
73+
74+
### 1. Correction
75+
76+
**Community Impact**: Use of inappropriate language or other behavior deemed
77+
unprofessional or unwelcome in the community.
78+
79+
**Consequence**: A private, written warning from community leaders, providing
80+
clarity around the nature of the violation and an explanation of why the
81+
behavior was inappropriate. A public apology may be requested.
82+
83+
### 2. Warning
84+
85+
**Community Impact**: A violation through a single incident or series of
86+
actions.
87+
88+
**Consequence**: A warning with consequences for continued behavior. No
89+
interaction with the people involved, including unsolicited interaction with
90+
those enforcing the Code of Conduct, for a specified period of time. This
91+
includes avoiding interactions in community spaces as well as external channels
92+
like social media. Violating these terms may lead to a temporary or permanent
93+
ban.
94+
95+
### 3. Temporary Ban
96+
97+
**Community Impact**: A serious violation of community standards, including
98+
sustained inappropriate behavior.
99+
100+
**Consequence**: A temporary ban from any sort of interaction or public
101+
communication with the community for a specified period of time. No public or
102+
private interaction with the people involved, including unsolicited interaction
103+
with those enforcing the Code of Conduct, is allowed during this period.
104+
Violating these terms may lead to a permanent ban.
105+
106+
### 4. Permanent Ban
107+
108+
**Community Impact**: Demonstrating a pattern of violation of community
109+
standards, including sustained inappropriate behavior, harassment of an
110+
individual, or aggression toward or disparagement of classes of individuals.
111+
112+
**Consequence**: A permanent ban from any sort of public interaction within the
113+
community.
114+
115+
## Attribution
116+
117+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118+
version 2.1, available at
119+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
120+
121+
Community Impact Guidelines were inspired by
122+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
123+
124+
For answers to common questions about this code of conduct, see the FAQ at
125+
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
126+
[https://www.contributor-covenant.org/translations][translations].
127+
128+
[homepage]: https://www.contributor-covenant.org
129+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
130+
[Mozilla CoC]: https://github.com/mozilla/diversity
131+
[FAQ]: https://www.contributor-covenant.org/faq
132+
[translations]: https://www.contributor-covenant.org/translations

CONTRIBUTING.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ Compiled binaries require no runtime dependencies and can be distributed as a si
8383
- TypeScript throughout.
8484
- Pure functions wherever possible (makes unit testing straightforward).
8585
- Side-effectful code (CLI parsing, API calls, TTY interaction) is isolated in `github-code-search`, `src/api.ts`, and `src/tui.ts`.
86-
- No linter is configured yet; keep diffs small and consistent with the surrounding code.
86+
- Run `bun run lint` (oxlint) — must pass with zero errors before submitting.
87+
- Run `bun run format:check` (oxfmt) — auto-fix locally with `bun run format`.
8788

8889
## Submitting a pull request
8990

README.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,82 @@ keyboard-driven TUI, fine-grained extract selection, markdown/JSON output.
1010

1111
**Full documentation: https://fulll.github.io/github-code-search/**
1212

13+
![Demo](demo/demo.gif)
14+
1315
## Quick start
1416

1517
```bash
1618
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
1719
curl -fsSL https://raw.githubusercontent.com/fulll/github-code-search/main/install.sh | bash
1820
github-code-search query "TODO" --org my-org
1921
```
22+
23+
## Features
24+
25+
- **Org-wide search** — queries all repositories in a GitHub organization in one command, with automatic pagination up to 1 000 results
26+
- **Per-repository aggregation** — results grouped by repo, not as a flat list; fold/unfold each repo to focus on what matters
27+
- **Keyboard-driven TUI** — navigate with arrow keys, toggle selections, filter by file path, confirm with Enter — without leaving the terminal
28+
- **Fine-grained selection** — pick exactly the repos and extracts you want; deselected items are recorded as exclusions in the replay command
29+
- **Structured output** — clean Markdown lists with GitHub links, or machine-readable JSON — ready to paste into docs, issues or scripts
30+
- **Team-prefix grouping** — group results by team prefix (e.g. `platform/`, `data/`) using `--group-by-team-prefix`
31+
- **Replay command** — every session produces a one-liner you can run in CI to reproduce the exact same selection without the UI
32+
- **Syntax highlighting** — code fragments rendered with language-aware coloring (TypeScript, Python, Go, Rust, YAML, JSON and more)
33+
34+
## Use cases
35+
36+
**Audit a dependency across the org**
37+
38+
```bash
39+
github-code-search query "from 'lodash'" --org my-org
40+
```
41+
42+
Instantly see every repo still importing lodash, select the ones to migrate, and get a Markdown checklist to paste in your migration issue.
43+
44+
**Hunt down TODOs before a release**
45+
46+
```bash
47+
github-code-search query "TODO" --org my-org --exclude-repositories sandbox,archived-repo
48+
```
49+
50+
Surfaces all in-code TODOs, lets you triage interactively, and outputs a linked list for your release notes.
51+
52+
**Verify a breaking-change rollout**
53+
54+
```bash
55+
github-code-search query "oldApiClient" --org my-org --output-type repo-only --format json
56+
```
57+
58+
Use JSON output in a CI script to assert that no repository still references the deprecated client after your migration deadline.
59+
60+
**Security sweep — find hardcoded secret patterns**
61+
62+
```bash
63+
github-code-search query "process.env.SECRET" --org my-org
64+
```
65+
66+
Cross-repo scan for risky patterns; export results to Markdown to attach to a security audit report.
67+
68+
**Onboarding — understand how an internal library is used**
69+
70+
```bash
71+
github-code-search query "useFeatureFlag" --org my-org --group-by-team-prefix platform/
72+
```
73+
74+
Get a team-scoped view of every usage site before refactoring a shared hook or utility.
75+
76+
## Why not `gh search code`?
77+
78+
The official [`gh` CLI](https://cli.github.com/) does support `gh search code`, but it returns a **flat paginated list** — one result per line, no grouping, no interactive selection, no structured output.
79+
80+
| | `gh search code` | `github-code-search` |
81+
| ------------------------------------------ | :--------------: | :------------------: |
82+
| Results grouped by repo |||
83+
| Interactive TUI (navigate, select, filter) |||
84+
| Fine-grained extract selection |||
85+
| Markdown / JSON output |||
86+
| Replay / CI command |||
87+
| Team-prefix grouping |||
88+
| Syntax highlighting in terminal |||
89+
| Pagination (up to 1 000 results) |||
90+
91+
`github-code-search` is purpose-built for **org-wide code audits and interactive triage** — not just a search wrapper.

SECURITY.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## Security
2+
3+
We take the security of our software products and components seriously, which includes all source code repositories managed through our [Fulll's GitHub organization](https://github.com/fulll).
4+
5+
If you believe you have found a security vulnerability in any Fulll's repository that meets Wikipedia's definition of a security vulnerability ([English version](<https://en.wikipedia.org/wiki/Vulnerability_(computing)>), [French version](<https://fr.wikipedia.org/wiki/Vuln%C3%A9rabilit%C3%A9_(informatique)>)), please report it to us as described below.
6+
7+
## Reporting security vulnerabilities
8+
9+
:warning: **Please do not report security vulnerabilities through public GitHub issues.**
10+
11+
Instead, **please report them by email** to [rssi@fulll.fr](mailto:rssi@fulll.fr).
12+
13+
You should receive a response as soon as possible. If for some reason you do not, please follow up via email to our [Administrator Team](mailto:admin@fulll.fr) to ensure we received your original message.
14+
15+
For private repositories, you can also send an email or directly use the dedicated issue template for security vulnerability.
16+
17+
:bulb: In any case, please include the requested information listed below (**as much as you can provide**) to help us better understand the nature and scope of the possible issue:
18+
19+
- Type of issue (e.g. Denial of service, Elevation of privilege, Information disclosure, Remote Code Execution, Security feature bypass, buffer overflow, SQL injection, cross-site scripting, etc.)
20+
- Full paths of source file(s) related to the manifestation of the issue
21+
- The location of the affected source code (tag/branch/commit or direct URL)
22+
- Step-by-step instructions to reproduce the issue, including any special configuration required to reproduce
23+
- (if possible) Proof-of-concept or exploit code
24+
- Description and Impact of the issue, including how an attacker might exploit the issue
25+
26+
This information will help us triage your report more quickly.
27+
28+
## Preferred Languages
29+
30+
We prefer all communications to be in English, but if you are not comfortable, French is acceptable too.
31+
32+
## Policy
33+
34+
Fulll follows the principle of [Microsoft's Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).

0 commit comments

Comments
 (0)