Initialize project skeleton with CLI and documentation
Add initial project structure including: - Go module with Cobra CLI dependency - Root command and main entrypoint - Basic documentation (README, AGENTS.md, architecture, decisions, development, roadmap) - Configuration example and gitignore - Tool version management with mise - Comprehensive project rules and conventions
This commit is contained in:
39
.gitignore
vendored
Normal file
39
.gitignore
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# If you prefer the allow list template instead of the deny list, see community template:
|
||||
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
||||
#
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
# Code coverage profiles and other test artifacts
|
||||
*.out
|
||||
coverage.*
|
||||
*.coverprofile
|
||||
profile.cov
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
||||
# Go workspace file
|
||||
go.work
|
||||
go.work.sum
|
||||
|
||||
# env file
|
||||
.env
|
||||
|
||||
# Editor/IDE
|
||||
# .idea/
|
||||
# .vscode/
|
||||
|
||||
# Mise
|
||||
mise.local.toml
|
||||
|
||||
# MyGO configuration
|
||||
# Tracking config.example.yaml in version control
|
||||
config.yaml
|
||||
54
AGENTS.md
Normal file
54
AGENTS.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# AGENTS.md — MyGO Backend
|
||||
|
||||
## Project Essentials
|
||||
|
||||
- Module: `github.com/dhao2001/mygo`, Go 1.26.2
|
||||
- WebDisk (cloud drive) backend; roadmap in `docs/roadmap.md`
|
||||
- CLI framework: `github.com/spf13/cobra`
|
||||
- Go version pinned in `mise.toml`
|
||||
|
||||
## Agent Workflow
|
||||
|
||||
1. Read the task
|
||||
2. Read relevant `docs/` files for context
|
||||
3. Explore existing code before writing new code
|
||||
4. Implement following the conventions below
|
||||
5. Verify: `go vet ./... && go test ./...`
|
||||
6. Update `docs/roadmap.md`, `docs/decisions.md`, or `docs/architecture.md` if anything changed
|
||||
|
||||
## Go Conventions
|
||||
|
||||
- **Format**: `go fmt ./...` before every commit
|
||||
- **Imports**: stdlib / third-party / internal, blank-line separated
|
||||
- **Errors**: wrap with `fmt.Errorf("context: %w", err)`
|
||||
- **Context**: first param in I/O, storage, lifecycle funcs
|
||||
- **Exported names**: doc-commented
|
||||
- **`init()`**: only in cobra cmd files for flag registration
|
||||
- **`cmd/`** is thin; business logic goes in `internal/`
|
||||
|
||||
## Documentation
|
||||
|
||||
| File | Read Before | Update After |
|
||||
|------|-------------|--------------|
|
||||
| `docs/architecture.md` | Adding new packages | Adding new packages |
|
||||
| `docs/decisions.md` | Making technical decisions | Making technical decisions |
|
||||
| `docs/roadmap.md` | Every task | Completing a feature |
|
||||
| `docs/development.md` | Build/test/debug setup | Changing workflow |
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
go build ./... # build all packages
|
||||
go test ./... # all tests
|
||||
go vet ./... # static analysis
|
||||
go fmt ./... # format
|
||||
go mod tidy # clean deps after add/remove
|
||||
```
|
||||
|
||||
## DO / DON'T
|
||||
|
||||
- DO put business logic in `internal/`, keep `cmd/` thin
|
||||
- DO write all code, comments, and documentation in English
|
||||
- DON'T read `go.sum` entirely into context — use `grep` or other tools to search specific patterns if needed
|
||||
- DON'T skip `go vet ./...` before finishing work
|
||||
- DON'T commit without explicit user request
|
||||
48
README.md
Normal file
48
README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# MyGO
|
||||
|
||||
MyGO is a WebDisk (cloud drive) server, written in Go.
|
||||
|
||||
**Current status**: pre-alpha — project skeleton with no core functionality implemented yet.
|
||||
|
||||
---
|
||||
|
||||
## Roadmap
|
||||
|
||||
### v0
|
||||
|
||||
- [ ] CLI configuration management (`mygo config`)
|
||||
- [ ] User authentication (JWT)
|
||||
- [ ] File upload / download / management (HTTP API)
|
||||
- [ ] Admin endpoints
|
||||
- [ ] WebDAV support
|
||||
|
||||
### Future
|
||||
|
||||
- [ ] Image server
|
||||
- [ ] Pastebin & code snippet editing in sharing
|
||||
- [ ] S3 storage backend
|
||||
- [ ] Nextcloud-compatible API
|
||||
|
||||
---
|
||||
|
||||
## CLI
|
||||
|
||||
`mygo` is the backend entrypoint with these subcommands:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `mygo serve` | Start the backend server |
|
||||
| `mygo config` | Manage instance configuration |
|
||||
| `mygo status` | Show server status |
|
||||
|
||||
---
|
||||
|
||||
## Frontend
|
||||
|
||||
The frontend uses React + TypeScript and communicates with the backend via HTTP API. Frontend source is maintained in a separate repository.
|
||||
|
||||
---
|
||||
|
||||
## Development
|
||||
|
||||
See `docs/development.md` for build and test workflows. See `AGENTS.md` for behavioral conventions.
|
||||
28
cmd/root.go
Normal file
28
cmd/root.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
// rootCmd represents the base command when called without any subcommands
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "mygo { serve | config | status }",
|
||||
Short: "MyGO server application",
|
||||
Long: `MyGO is a WebDisk (Cloud Drive) server.
|
||||
This is the server (backend) application for MyGO.`,
|
||||
}
|
||||
|
||||
// Execute adds all child commands to the root command and sets flags appropriately.
|
||||
// This is called by main.main(). It only needs to happen once to the rootCmd.
|
||||
func Execute() {
|
||||
err := rootCmd.Execute()
|
||||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
cobra.OnInitialize()
|
||||
}
|
||||
3
config.example.yaml
Normal file
3
config.example.yaml
Normal file
@@ -0,0 +1,3 @@
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 10086
|
||||
8
docs/README.md
Normal file
8
docs/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Docs
|
||||
|
||||
| File | Content |
|
||||
|------|---------|
|
||||
| `architecture.md` | Module layout, package boundaries |
|
||||
| `decisions.md` | Technical decisions (ADR) |
|
||||
| `roadmap.md` | Feature progress and status |
|
||||
| `development.md` | Build, test, debug workflow |
|
||||
22
docs/architecture.md
Normal file
22
docs/architecture.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Architecture
|
||||
|
||||
## Code Layout
|
||||
|
||||
```
|
||||
main.go — entrypoint, calls cmd.Execute()
|
||||
cmd/ — cobra commands (root + subcommands)
|
||||
internal/ — private application packages
|
||||
docs/ — project documentation
|
||||
```
|
||||
|
||||
## Packages
|
||||
|
||||
| Package | Purpose | Status |
|
||||
|---------|---------|--------|
|
||||
| `cmd` | CLI command definitions | ✅ skeleton |
|
||||
| `internal/config` | Configuration loading and parsing | ⬜ planned |
|
||||
| `internal/controllers` | HTTP request handlers | ⬜ planned |
|
||||
| `internal/auth` | Authentication (JWT) | ⬜ planned |
|
||||
| `internal/storage` | File storage abstraction | ⬜ planned |
|
||||
|
||||
Add new rows as packages are created.
|
||||
19
docs/decisions.md
Normal file
19
docs/decisions.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Technical Decisions
|
||||
|
||||
Record significant technical decisions as they are made. Use the format below.
|
||||
|
||||
## Template
|
||||
|
||||
```
|
||||
## YYYY-MM-DD: Title
|
||||
|
||||
**Context**: Why this decision was needed.
|
||||
|
||||
**Decision**: What was decided.
|
||||
|
||||
**Consequences**: What this means for the project.
|
||||
```
|
||||
|
||||
## Decisions
|
||||
|
||||
*(None yet. Add entries as decisions are made.)*
|
||||
37
docs/development.md
Normal file
37
docs/development.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Development
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Go 1.26.2 (pinned in `mise.toml`)
|
||||
- `mise` (https://mise.jdx.dev) — run `mise install` to install toolchain
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
go build ./...
|
||||
go build -o mygo .
|
||||
```
|
||||
|
||||
## Test
|
||||
|
||||
```bash
|
||||
go test ./...
|
||||
go test -v -run TestName ./internal/...
|
||||
```
|
||||
|
||||
## Lint & Format
|
||||
|
||||
```bash
|
||||
go vet ./...
|
||||
go fmt ./...
|
||||
```
|
||||
|
||||
## Config
|
||||
|
||||
Server config is in `config.yaml` (symlink to `config.example.yaml` in development environment).
|
||||
|
||||
```
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 10086
|
||||
```
|
||||
24
docs/roadmap.md
Normal file
24
docs/roadmap.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Roadmap
|
||||
|
||||
See `README.md` for high-level feature list. This file tracks detailed progress.
|
||||
|
||||
## v0
|
||||
|
||||
| Feature | Status | Notes |
|
||||
|---------|--------|-------|
|
||||
| CLI config management | ⬜ planned | |
|
||||
| JWT authentication | ⬜ planned | |
|
||||
| File upload/download/manage APIs | ⬜ planned | |
|
||||
| Admin endpoints | ⬜ planned | |
|
||||
| WebDAV | ⬜ planned | |
|
||||
|
||||
## Future
|
||||
|
||||
| Feature | Status | Notes |
|
||||
|---------|--------|-------|
|
||||
| Image server | ⬜ planned | |
|
||||
| Pastebin & code snippets | ⬜ planned | |
|
||||
| S3 storage backend | ⬜ planned | |
|
||||
| Nextcloud-compatible API | ⬜ planned | |
|
||||
|
||||
Update status after completing related work.
|
||||
10
go.mod
Normal file
10
go.mod
Normal file
@@ -0,0 +1,10 @@
|
||||
module github.com/dhao2001/mygo
|
||||
|
||||
go 1.26.2
|
||||
|
||||
require github.com/spf13/cobra v1.10.2
|
||||
|
||||
require (
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/spf13/pflag v1.0.10 // indirect
|
||||
)
|
||||
11
go.sum
Normal file
11
go.sum
Normal file
@@ -0,0 +1,11 @@
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
|
||||
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
|
||||
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
||||
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
7
main.go
Normal file
7
main.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "github.com/dhao2001/mygo/cmd"
|
||||
|
||||
func main() {
|
||||
cmd.Execute()
|
||||
}
|
||||
Reference in New Issue
Block a user