refactor: make ARNES external-repo based with ticket publish flow
This commit is contained in:
@@ -16,12 +16,16 @@ ask() {
|
||||
}
|
||||
|
||||
echo "=== ARNES start wizard ==="
|
||||
echo "Mode: use this template in a new repo or copy core ARNES into an existing repo."
|
||||
|
||||
echo "Mode: clone arnes-fork, put your app folder inside, run this wizard."
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo "No git repo detected. Initializing local git repository..."
|
||||
git init >/dev/null
|
||||
fi
|
||||
|
||||
PROJECT_NAME="$(ask 'Project name' 'my-project')"
|
||||
PROJECT_DESC="$(ask 'Project description' 'Project using ARNES template')"
|
||||
APP_DIR="$(ask 'App directory (relative)' 'app')"
|
||||
APP_DIR="$(ask 'App directory (relative)' 'project')"
|
||||
|
||||
STACK_CHOICE="$(ask 'Stack preset (1=default Flask+MariaDB+Skeleton, 2=custom)' '1')"
|
||||
if [ "$STACK_CHOICE" = "2" ]; then
|
||||
@@ -40,12 +44,22 @@ MODEL_MODE="$(ask 'Model mode (lean/balanced/power)' 'lean')"
|
||||
ADD_BOOTSTRAP="$(ask 'Create bootstrap ticket F-001 now? (y/n)' 'y')"
|
||||
|
||||
mkdir -p "$APP_DIR"
|
||||
[ -f "$APP_DIR/README.md" ] || cat > "$APP_DIR/README.md" <<EOF
|
||||
# Project code
|
||||
|
||||
This directory holds the real project code.
|
||||
Configured by ARNES start wizard.
|
||||
EOF
|
||||
|
||||
if [ "$BACKEND" = "python/flask" ]; then
|
||||
mkdir -p "$APP_DIR/templates" "$APP_DIR/static/js" "$APP_DIR/static/css" "$APP_DIR/static/images"
|
||||
fi
|
||||
|
||||
if [ "$CSSFW" = "skeleton" ]; then
|
||||
mkdir -p "$APP_DIR/static/css" "$APP_DIR/static/images"
|
||||
cp -n defaults/flask-skeleton/static/css/normalize.css "$APP_DIR/static/css/normalize.css" || true
|
||||
cp -n defaults/flask-skeleton/static/css/skeleton.css "$APP_DIR/static/css/skeleton.css" || true
|
||||
cp -n defaults/flask-skeleton/static/images/favicon.png "$APP_DIR/static/images/favicon.png" || true
|
||||
[ -f "$APP_DIR/static/css/normalize.css" ] || cp defaults/flask-skeleton/static/css/normalize.css "$APP_DIR/static/css/normalize.css"
|
||||
[ -f "$APP_DIR/static/css/skeleton.css" ] || cp defaults/flask-skeleton/static/css/skeleton.css "$APP_DIR/static/css/skeleton.css"
|
||||
[ -f "$APP_DIR/static/images/favicon.png" ] || cp defaults/flask-skeleton/static/images/favicon.png "$APP_DIR/static/images/favicon.png"
|
||||
fi
|
||||
|
||||
cat > harness/project.config.json <<JSON
|
||||
@@ -82,7 +96,7 @@ APP_DIR=$(python3 - <<'PY'
|
||||
import json
|
||||
from pathlib import Path
|
||||
cfg=json.loads(Path('harness/project.config.json').read_text())
|
||||
print(cfg.get('app_dir','app'))
|
||||
print(cfg.get('app_dir','project'))
|
||||
PY
|
||||
)
|
||||
TEST_CMD=$(python3 - <<'PY'
|
||||
@@ -126,25 +140,34 @@ import json
|
||||
from pathlib import Path
|
||||
from datetime import date
|
||||
|
||||
b=Path('backlog/features.json')
|
||||
data=json.loads(b.read_text(encoding='utf-8'))
|
||||
data['project']='$PROJECT_NAME'
|
||||
data['description']='$PROJECT_DESC'
|
||||
features=data.get('features',[])
|
||||
b = Path('backlog/features.json')
|
||||
data = json.loads(b.read_text(encoding='utf-8'))
|
||||
data['project'] = '$PROJECT_NAME'
|
||||
data['description'] = '$PROJECT_DESC'
|
||||
rules = data.setdefault('rules', {})
|
||||
rules.setdefault('valid_types', ['feature', 'fix', 'bug', 'chore'])
|
||||
features = data.get('features', [])
|
||||
|
||||
if '$ADD_BOOTSTRAP'.lower().startswith('y') and not features:
|
||||
features.append({
|
||||
'id':'F-001',
|
||||
'title':'Bootstrap ARNES on project',
|
||||
'description':'Setup ARNES pipeline and run first complete feature cycle.',
|
||||
'acceptance':['verify.sh is green','runtime status works','first feature closes with gates'],
|
||||
'status':'pending',
|
||||
'created_at':str(date.today()),
|
||||
'gates':{'review':False,'security':False,'qa':False}
|
||||
'id': 'F-001',
|
||||
'type': 'chore',
|
||||
'title': 'Bootstrap ARNES on project',
|
||||
'problem': 'Need base workflow and control',
|
||||
'goal': 'Make ARNES ready on this repo',
|
||||
'scope_in': ['Harness setup', 'Runtime status', 'First verify cycle'],
|
||||
'scope_out': ['Business feature work', 'Product redesign'],
|
||||
'priority': 'med',
|
||||
'risk': 'low',
|
||||
'description': 'Problem: Need base workflow and control. Goal: Make ARNES ready on this repo. Scope IN: Harness setup, Runtime status, First verify cycle. Scope OUT: Business feature work, Product redesign. Type: chore. Priority: med. Risk: low.',
|
||||
'acceptance': ['verify.sh is green', 'runtime status works', 'first feature closes with gates'],
|
||||
'status': 'pending',
|
||||
'created_at': str(date.today()),
|
||||
'gates': {'review': False, 'security': False, 'qa': False}
|
||||
})
|
||||
|
||||
data['features']=features
|
||||
b.write_text(json.dumps(data,indent=2,ensure_ascii=False)+'\n',encoding='utf-8')
|
||||
data['features'] = features
|
||||
b.write_text(json.dumps(data, indent=2, ensure_ascii=False) + '\n', encoding='utf-8')
|
||||
PY
|
||||
|
||||
cat > work/current.md <<EOF
|
||||
@@ -169,5 +192,6 @@ echo "Done. Project configured."
|
||||
echo "- Config: harness/project.config.json"
|
||||
echo "- Local checks: scripts/verify.local.sh"
|
||||
echo "- Ticket tool: python3 scripts/new_ticket.py"
|
||||
echo "- Publish tool: python3 scripts/publish_ticket.py --feature-id F-001"
|
||||
echo "- Verify: ./scripts/verify.sh"
|
||||
echo "- Runtime: python3 scripts/agent_status.py show"
|
||||
|
||||
Reference in New Issue
Block a user