Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
e403656
Remove previous code
Jul 11, 2026
c960d87
Init go module
Jul 11, 2026
2644075
Add mailmap
Jul 11, 2026
1795a84
Add license
Jul 11, 2026
8ab923a
Add label syncing workflow
Jul 11, 2026
3e95986
Add editor config
Jul 11, 2026
c720c94
Add terminal raw mode
Jul 11, 2026
5e6b8d2
Add logger
Jul 11, 2026
543a458
Add exit command
Jul 11, 2026
31d57ef
Add Banner & Unit test
Jul 11, 2026
66e90ee
Fix line warping
Jul 11, 2026
749ea0a
Add help command
Jul 11, 2026
435f040
Update prompt
Jul 11, 2026
ecd29f4
Add clear command
Jul 11, 2026
641a5bf
Add command loading logging
Jul 11, 2026
e310abf
Update gitignore
Jul 11, 2026
df0ac62
Add target website
Jul 11, 2026
2f78ab1
Small fix
Jul 11, 2026
2c3ab3f
whoops
Jul 11, 2026
00d05ac
Update help command:
Jul 11, 2026
d3e1234
Add unit tests
Jul 11, 2026
82eb46e
Add dns record scanning
Jul 11, 2026
b871d14
.
Jul 12, 2026
8765eb0
Remove report
Jul 12, 2026
f32ee3b
Module sys rewrite
Jul 12, 2026
4d16f90
Add external modules support
Jul 12, 2026
55fd99b
Add cache dir creation
Jul 12, 2026
5467665
Thanks windows
Jul 12, 2026
2a4b7e2
Add module installation command
Jul 14, 2026
c3b9f8c
Add module downloading
Jul 14, 2026
c3dbc81
Add module hot reload
Jul 14, 2026
ca433f9
Add pkg dir
Jul 14, 2026
b431dbf
Add exit command unit tests
Jul 14, 2026
5266ae4
Update sync-labels.yml
IdanKoblik Jul 14, 2026
3623940
Update labels.json
IdanKoblik Jul 14, 2026
114c1f1
Add ci
Jul 14, 2026
a9e4c0b
tidy
Jul 14, 2026
72197a5
Thanks microsoft
Jul 14, 2026
8241f2d
Update ci
Jul 14, 2026
2d2996c
Wow that a lot of changes
Jul 14, 2026
11bc799
Update ci
Jul 14, 2026
1f0b30a
Update gitignore
Jul 14, 2026
e797d17
Add target scanning
Jul 14, 2026
9547db7
Update usage
Jul 14, 2026
58fc9dd
Scan update
Jul 14, 2026
5a2dcb8
Update the usage of external modules
Jul 15, 2026
1b55021
Add cli styling
Jul 15, 2026
e78d9c9
Update help cmd
Jul 15, 2026
de614f4
Create README.md
IdanKoblik Jul 15, 2026
7060b91
Update module downloading system
IdanKoblik Jul 16, 2026
2139733
Add cmd history navigation
IdanKoblik Jul 16, 2026
e1e9ffa
Add info command:
IdanKoblik Jul 16, 2026
e56f48d
Enhance README with project details and instructions
IdanKoblik Jul 16, 2026
ed00646
Add demo image
IdanKoblik Jul 16, 2026
b95b6a7
Update mod
IdanKoblik Jul 17, 2026
466fa76
Add files via upload
IdanKoblik Jul 17, 2026
12a76cc
Update README.md
IdanKoblik Jul 17, 2026
6130d0f
Add installation scripts
IdanKoblik Jul 17, 2026
827829c
Add installation scripts
IdanKoblik Jul 17, 2026
4e2a99a
Add version update suggestion
IdanKoblik Jul 17, 2026
c85ba96
Add version flag
IdanKoblik Jul 17, 2026
64f1038
Update README.md
IdanKoblik Jul 17, 2026
17a84a2
Add logging
IdanKoblik Jul 18, 2026
7b619f8
Add print banner on clean
IdanKoblik Jul 18, 2026
1e425cb
Add target change in runtime
IdanKoblik Jul 18, 2026
7b2dfa9
.
IdanKoblik Jul 18, 2026
90608b7
Update mimic
IdanKoblik Jul 18, 2026
df35858
Update README.md
IdanKoblik Jul 18, 2026
5bc5ff1
Merge branch 'main' into rewrite
IdanKoblik Jul 18, 2026
509b929
Fix lint error
IdanKoblik Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab

[*.{xml,yml,yaml,json}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false
20 changes: 20 additions & 0 deletions .github/labels.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
{ "name": "type/feature", "color": "1D76DB", "description": "New features or enhancements" },
{ "name": "type/bug", "color": "D73A4A", "description": "Bug reports and fixes" },
{ "name": "type/documentation","color": "0E8A16", "description": "Documentation improvements" },
{ "name": "type/enhancement", "color": "5319E7", "description": "General improvements" },
{ "name": "type/refactor", "color": "6F42C1", "description": "Code refactoring" },
{ "name": "type/performance", "color": "0052CC", "description": "Performance improvements" },
{ "name": "type/accessibility","color": "7B61FF", "description": "Accessibility-related changes" },
{ "name": "type/chore", "color": "8B949E", "description": "Routine maintenance tasks" },

{ "name": "community/help-wanted", "color": "2563EB", "description": "Help wanted from community" },
{ "name": "community/good-first-issue", "color": "8B5CF6", "description": "Good for first-time contributors" },

{ "name": "area/web", "color": "6366F1", "description": "web-related" },
{ "name": "area/cli", "color": "6366F1", "description": "cli-related" },
{ "name": "area/config", "color": "6366F1", "description": "Configuration-related" },
{ "name": "area/build", "color": "4F46E5", "description": "Build system changes" },
{ "name": "area/dependencies", "color": "4338CA", "description": "Dependency updates" },
{ "name": "area/ci", "color": "7C3AED", "description": "CI/CD improvements" }
]
147 changes: 147 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
name: CI

on:
pull_request:
branches: [main]
push:
branches: [main]
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. v1.2.3)'
required: true
type: string

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
GO_VERSION: '1.26.4'

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true

- name: Verify go.mod is tidy
run: |
go mod tidy
git diff --exit-code -- go.mod go.sum \
|| (echo "::error::go.mod/go.sum are not tidy — run 'make tidy'" && exit 1)

- name: go vet
run: make vet

- name: staticcheck
uses: dominikh/staticcheck-action@v1
with:
version: latest
install-go: false

test:
name: Test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v7

- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true

- name: Test
shell: bash
run: go test -race -coverprofile=coverage.out ./...

- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.os }}
path: coverage.out
if-no-files-found: ignore

build:
name: Build (${{ matrix.goos }}/${{ matrix.goarch }})
needs: [lint, test]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- goos: linux
goarch: amd64
- goos: linux
goarch: arm64
- goos: darwin
goarch: amd64
- goos: darwin
goarch: arm64
- goos: windows
goarch: amd64
steps:
- uses: actions/checkout@v7

- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true

- name: Build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
VERSION: ${{ github.event.inputs.version || format('dev-{0}', github.sha) }}
run: make release-build

- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: gs-${{ matrix.goos }}-${{ matrix.goarch }}
path: dist/gs-*
if-no-files-found: error

release:
name: Release ${{ github.event.inputs.version }}
if: github.event_name == 'workflow_dispatch'
needs: [build]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v7

- name: Download all build artifacts
uses: actions/download-artifact@v4
with:
pattern: gs-*
path: dist
merge-multiple: true

- name: Generate checksums
working-directory: dist
run: sha256sum gs-* > checksums.txt

- name: Publish release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.version }}
name: ${{ github.event.inputs.version }}
generate_release_notes: true
files: |
dist/gs-*
dist/checksums.txt
138 changes: 138 additions & 0 deletions .github/workflows/sync-labels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
name: Sync Labels

on:
push:
paths:
- '.github/labels.json'
workflow_dispatch:

permissions:
contents: read
issues: write
pull-requests: write

jobs:
sync:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v7

- uses: actions/github-script@v9
with:
script: |
const fs = require('fs');

// Read labels file
const labels = JSON.parse(
fs.readFileSync('.github/labels.json', 'utf8')
);

if (!Array.isArray(labels)) {
throw new Error(
'.github/labels.json must contain an array of label objects'
);
}

// Validate labels
for (const [index, label] of labels.entries()) {
if (!label || typeof label !== 'object') {
throw new Error(
`Label at index ${index} is not a valid object`
);
}

if (
typeof label.name !== 'string' ||
label.name.trim() === ''
) {
throw new Error(
`Label at index ${index} is missing a valid "name" field: ${JSON.stringify(label)}`
);
}

if (
typeof label.color !== 'string' ||
!/^[0-9a-fA-F]{6}$/.test(label.color)
) {
throw new Error(
`Label "${label.name}" has an invalid "color" field. Expected a 6-character hex code without '#'.`
);
}
}

// Fetch existing labels from GitHub
const existingLabels = await github.paginate(
github.rest.issues.listLabelsForRepo,
{
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 100,
}
);

const newLabelNames = new Set(
labels.map(label => label.name.toLowerCase())
);

// Delete labels that no longer exist in labels.json
for (const existingLabel of existingLabels) {
if (
existingLabel.name &&
!newLabelNames.has(existingLabel.name.toLowerCase())
) {
try {
await github.rest.issues.deleteLabel({
owner: context.repo.owner,
repo: context.repo.repo,
name: existingLabel.name,
});

console.log(`Deleted label: ${existingLabel.name}`);
} catch (error) {
console.log(
`Failed to delete label "${existingLabel.name}": ${error.message}`
);
}
}
}

// Create or update labels
for (const label of labels) {
try {
const existingLabel = existingLabels.find(
l =>
l.name &&
l.name.toLowerCase() === label.name.toLowerCase()
);

if (existingLabel) {
await github.rest.issues.updateLabel({
owner: context.repo.owner,
repo: context.repo.repo,
name: existingLabel.name,
new_name: label.name,
color: label.color,
description: label.description || '',
});

console.log(`Updated label: ${label.name}`);
} else {
await github.rest.issues.createLabel({
owner: context.repo.owner,
repo: context.repo.repo,
name: label.name,
color: label.color,
description: label.description || '',
});

console.log(`Created label: ${label.name}`);
}
} catch (error) {
console.log(
`Error processing label "${label.name}": ${error.message}`
);
}
}

console.log('Label synchronization completed.');
33 changes: 33 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,34 @@
# Local
*.html
gs
dist/
coverage.out

# macOS
.DS_Store

# Node / Next.js
node_modules
.next
npm-debug.log*
pnpm-debug.log*
frontend/.next
frontend/node_modules

# Go
/.gopath
backend/.gopath
backend/bin
backend/obj
backend/server

# Env / config
.env
.env.*
*.local

# Logs
*.log

# Docker artifacts
db_data
4 changes: 4 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Idan Koblik <me@idank.dev> <me@idank.dev>
Idan Koblik <me@idank.dev> <idankob@gmail.com>

Nitay Stain <nitaystain090@gmail.com>
Loading
Loading