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">
|
<meta name="robots" content="noindex, nofollow">
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
|
// Theme
|
||||||
var t = localStorage.getItem('APP_ID-theme') || 'system';
|
var t = localStorage.getItem('APP_ID-theme') || 'system';
|
||||||
var dark = t === 'dark' || (t === 'system' && matchMedia('(prefers-color-scheme:dark)').matches);
|
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', dark ? 'dark' : 'light');
|
||||||
document.documentElement.setAttribute('data-theme-pref', t);
|
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>
|
</script>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
<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 => {
|
self.addEventListener('install', e => {
|
||||||
e.waitUntil(
|
e.waitUntil(
|
||||||
caches.open(CACHE).then(c => c.addAll(STATIC))
|
caches.open(CACHE).then(c => c.addAll(STATIC))
|
||||||
// skipWaiting() は意図的に呼ばない
|
|
||||||
// → updatefound イベントで UI 側からユーザーに通知する方式を採用
|
|
||||||
);
|
);
|
||||||
|
self.skipWaiting();
|
||||||
});
|
});
|
||||||
|
|
||||||
self.addEventListener('activate', e => {
|
self.addEventListener('activate', e => {
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ echo ""
|
||||||
|
|
||||||
# --- Step 1: テンプレートコピー & 置換 ---
|
# --- Step 1: テンプレートコピー & 置換 ---
|
||||||
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 対応)
|
# 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
|
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"
|
git commit --allow-empty -m "ci: trigger initial Vercel deployment"
|
||||||
npm run deploy
|
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 "========================================"
|
echo "========================================"
|
||||||
echo " 完了! $APP_NAME"
|
echo " 完了! $APP_NAME"
|
||||||
|
|
@ -116,10 +196,14 @@ echo " ディレクトリ : $TARGET_DIR"
|
||||||
echo " Gitea : http://100.76.7.3:3000/mai/$APP_ID"
|
echo " Gitea : http://100.76.7.3:3000/mai/$APP_ID"
|
||||||
echo " GitHub : https://github.com/$GITHUB_ORG/$APP_ID"
|
echo " GitHub : https://github.com/$GITHUB_ORG/$APP_ID"
|
||||||
echo ""
|
echo ""
|
||||||
echo " 次の必須作業(Dashboard 更新):"
|
echo " 自動完了済み:"
|
||||||
echo " 1. posimai-dashboard/src/data/projects.json にカードを追加"
|
echo " - projects.json にカード追加"
|
||||||
echo " 2. ecosystem/page.tsx の NODES / EDGES に追加"
|
echo " - timeline/page.tsx に launch エントリ追加"
|
||||||
echo " 3. timeline/page.tsx の EVENTS に追加"
|
echo " - roadmap.json に追加"
|
||||||
echo " 4. access/page.tsx の APPS に追加"
|
echo " - Dashboard / Roadmap デプロイ"
|
||||||
echo " 5. Dashboard をデプロイ: cd posimai-dashboard && npm run deploy"
|
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 ""
|
echo ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue