chore: _template-minimal 現行化 + create-app.sh ダッシュボード自動更新
- _template-minimal/sw.js: skipWaiting() 追加(デプロイ後の旧キャッシュ残留防止) - _template-minimal/index.html: JWT token handoff 追加(ダッシュボードからのSSO対応) - create-app.sh: コピー元を _template → _template-minimal に変更 - create-app.sh: Step 8 追加 — projects.json / timeline / roadmap を自動更新してデプロイまで完結 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
ee7b3053e2
commit
5538cde753
|
|
@ -5,10 +5,21 @@
|
|||
<meta name="robots" content="noindex, nofollow">
|
||||
<script>
|
||||
(function () {
|
||||
// Theme
|
||||
var t = localStorage.getItem('APP_ID-theme') || 'system';
|
||||
var dark = t === 'dark' || (t === 'system' && matchMedia('(prefers-color-scheme:dark)').matches);
|
||||
document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
|
||||
document.documentElement.setAttribute('data-theme-pref', t);
|
||||
|
||||
// JWT token handoff (cross-domain login from posimai-dashboard)
|
||||
var p = new URLSearchParams(location.search);
|
||||
var tk = p.get('token');
|
||||
if (tk) {
|
||||
localStorage.setItem('posimai_token', tk);
|
||||
p.delete('token');
|
||||
var u = location.pathname + (p.toString() ? '?' + p.toString() : '') + location.hash;
|
||||
history.replaceState({}, '', u);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ const STATIC = ['/', '/index.html', '/manifest.json', '/logo.png'];
|
|||
self.addEventListener('install', e => {
|
||||
e.waitUntil(
|
||||
caches.open(CACHE).then(c => c.addAll(STATIC))
|
||||
// skipWaiting() は意図的に呼ばない
|
||||
// → updatefound イベントで UI 側からユーザーに通知する方式を採用
|
||||
);
|
||||
self.skipWaiting();
|
||||
});
|
||||
|
||||
self.addEventListener('activate', e => {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ echo ""
|
|||
|
||||
# --- Step 1: テンプレートコピー & 置換 ---
|
||||
echo "Step 1: テンプレートをコピーして置換..."
|
||||
cp -r "$SCRIPT_DIR/_template" "$TARGET_DIR"
|
||||
cp -r "$SCRIPT_DIR/_template-minimal" "$TARGET_DIR"
|
||||
|
||||
# sed で 3 変数を一括置換(macOS / Linux / Git Bash 対応)
|
||||
find "$TARGET_DIR" -type f \( -name "*.html" -o -name "*.json" -o -name "*.js" -o -name "*.md" \) | while IFS= read -r f; do
|
||||
|
|
@ -107,6 +107,86 @@ echo "Step 7: 初回本番デプロイをトリガー..."
|
|||
git commit --allow-empty -m "ci: trigger initial Vercel deployment"
|
||||
npm run deploy
|
||||
|
||||
# --- Step 8: Dashboard 自動更新 ---
|
||||
echo ""
|
||||
echo "Step 8: Dashboard を自動更新..."
|
||||
|
||||
DASHBOARD_DIR="$SCRIPT_DIR/posimai-dashboard"
|
||||
ROADMAP_DIR="$SCRIPT_DIR/posimai-roadmap"
|
||||
TODAY=$(date +%Y-%m-%d)
|
||||
|
||||
# projects.json に追加
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const f = '$DASHBOARD_DIR/src/data/projects.json';
|
||||
const d = JSON.parse(fs.readFileSync(f, 'utf8'));
|
||||
const already = d.projects.some(p => p.id === '$APP_ID');
|
||||
if (!already) {
|
||||
d.projects.unshift({
|
||||
id: '$APP_ID',
|
||||
name: '$APP_NAME',
|
||||
category: 'micro',
|
||||
status: 'beta',
|
||||
description: '$APP_DESC',
|
||||
techStack: ['HTML', 'CSS', 'JavaScript', 'PWA'],
|
||||
links: { github: 'https://github.com/$GITHUB_ORG/$APP_ID' },
|
||||
pwa: true,
|
||||
themeColor: '#0D0D0D',
|
||||
accentColor: '#6EE7B7'
|
||||
});
|
||||
d.lastUpdated = '$TODAY';
|
||||
fs.writeFileSync(f, JSON.stringify(d, null, 4));
|
||||
console.log(' projects.json: 追加完了');
|
||||
} else {
|
||||
console.log(' projects.json: 既存エントリあり、スキップ');
|
||||
}
|
||||
" || echo " [WARN] projects.json の更新に失敗しました"
|
||||
|
||||
# timeline/page.tsx に launch エントリを追加
|
||||
TIMELINE_FILE="$DASHBOARD_DIR/src/app/timeline/page.tsx"
|
||||
if grep -q "\"$APP_ID\"" "$TIMELINE_FILE" 2>/dev/null; then
|
||||
echo " timeline/page.tsx: 既存エントリあり、スキップ"
|
||||
else
|
||||
# "const EVENTS: TimelineEvent[] = [" の直後に挿入
|
||||
sed -i "s/const EVENTS: TimelineEvent\[\] = \[/const EVENTS: TimelineEvent[] = [\n { date: \"$TODAY\", type: \"launch\", app: \"$APP_ID\", title: \"$APP_NAME リリース\", desc: \"$APP_DESC\" },/" \
|
||||
"$TIMELINE_FILE" \
|
||||
&& echo " timeline/page.tsx: 追加完了" \
|
||||
|| echo " [WARN] timeline/page.tsx の更新に失敗しました"
|
||||
fi
|
||||
|
||||
# roadmap.json に追加
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const f = '$ROADMAP_DIR/roadmap.json';
|
||||
const d = JSON.parse(fs.readFileSync(f, 'utf8'));
|
||||
if (!d.apps) d.apps = [];
|
||||
const already = d.apps.some(a => a.id === '$APP_ID');
|
||||
if (!already) {
|
||||
d.apps.push({ id: '$APP_ID', tasks: [] });
|
||||
fs.writeFileSync(f, JSON.stringify(d, null, 2));
|
||||
console.log(' roadmap.json: 追加完了');
|
||||
} else {
|
||||
console.log(' roadmap.json: 既存エントリあり、スキップ');
|
||||
}
|
||||
" || echo " [WARN] roadmap.json の更新に失敗しました"
|
||||
|
||||
# Dashboard と Roadmap をデプロイ
|
||||
echo ""
|
||||
echo " Dashboard をデプロイ中..."
|
||||
cd "$DASHBOARD_DIR"
|
||||
git add src/data/projects.json src/app/timeline/page.tsx && \
|
||||
git commit -m "feat: $APP_NAME をダッシュボードに追加" && \
|
||||
npm run deploy && \
|
||||
echo " Dashboard デプロイ完了" || echo " [WARN] Dashboard デプロイに失敗しました"
|
||||
|
||||
echo ""
|
||||
echo " Roadmap をデプロイ中..."
|
||||
cd "$ROADMAP_DIR"
|
||||
git add roadmap.json && \
|
||||
git commit -m "feat: $APP_NAME を roadmap に追加" && \
|
||||
npm run deploy && \
|
||||
echo " Roadmap デプロイ完了" || echo " [WARN] Roadmap デプロイに失敗しました"
|
||||
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo " 完了! $APP_NAME"
|
||||
|
|
@ -116,10 +196,14 @@ echo " ディレクトリ : $TARGET_DIR"
|
|||
echo " Gitea : http://100.76.7.3:3000/mai/$APP_ID"
|
||||
echo " GitHub : https://github.com/$GITHUB_ORG/$APP_ID"
|
||||
echo ""
|
||||
echo " 次の必須作業(Dashboard 更新):"
|
||||
echo " 1. posimai-dashboard/src/data/projects.json にカードを追加"
|
||||
echo " 2. ecosystem/page.tsx の NODES / EDGES に追加"
|
||||
echo " 3. timeline/page.tsx の EVENTS に追加"
|
||||
echo " 4. access/page.tsx の APPS に追加"
|
||||
echo " 5. Dashboard をデプロイ: cd posimai-dashboard && npm run deploy"
|
||||
echo " 自動完了済み:"
|
||||
echo " - projects.json にカード追加"
|
||||
echo " - timeline/page.tsx に launch エントリ追加"
|
||||
echo " - roadmap.json に追加"
|
||||
echo " - Dashboard / Roadmap デプロイ"
|
||||
echo ""
|
||||
echo " 手動で追加が必要なもの:"
|
||||
echo " 1. apps/page.tsx の projectIds に追加(カテゴリ判断が必要)"
|
||||
echo " 2. ecosystem/page.tsx の NODES / EDGES に追加(接続関係の判断が必要)"
|
||||
echo " 3. logo.png を配置後: cd $TARGET_DIR && git add logo.png && git commit -m 'feat: logo 追加' && npm run deploy"
|
||||
echo ""
|
||||
|
|
|
|||
Loading…
Reference in New Issue