Skip to content

Commit 274d056

Browse files
committed
Merge branch 'main' into new-title
2 parents 2064a8a + 28504a9 commit 274d056

File tree

108 files changed

+25707
-10460
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+25707
-10460
lines changed

.github/workflows/jseval-tests.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: jsEval Tests CI
2+
on:
3+
pull_request:
4+
paths:
5+
- 'packages/jsEval/**'
6+
- '.github/workflows/jseval-tests.yml'
7+
jobs:
8+
test-js-eval:
9+
runs-on: ubuntu-latest
10+
strategy:
11+
matrix:
12+
node-version: [22.x]
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-node@v4
16+
with:
17+
node-version: ${{ matrix.node-version }}
18+
cache: 'npm'
19+
- run: npm ci
20+
- run: npm test -w @my-code/js-eval

.github/workflows/node.js.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
- run: npm ci
3434
- run: npm run tsc
3535

36-
test-js-eval:
36+
check-docs:
3737
runs-on: ubuntu-latest
3838
strategy:
3939
matrix:
@@ -45,4 +45,4 @@ jobs:
4545
node-version: ${{ matrix.node-version }}
4646
cache: 'npm'
4747
- run: npm ci
48-
- run: npm test --workspace=packages/jsEval
48+
- run: npm run checkDocs
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: Runtime Tests CI
2+
on:
3+
pull_request:
4+
paths:
5+
- 'packages/runtime/**'
6+
- '.github/workflows/runtime-tests.yml'
7+
jobs:
8+
test-runtime:
9+
runs-on: ubuntu-latest
10+
strategy:
11+
matrix:
12+
node-version: [22.x]
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-node@v4
16+
with:
17+
node-version: ${{ matrix.node-version }}
18+
cache: 'npm'
19+
- run: npm ci
20+
- run: npm test -w @my-code/runtime

.github/workflows/update-docs.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Update Docs Revision And Database
2+
on:
3+
push:
4+
branches: [ "main" ]
5+
permissions:
6+
contents: write
7+
jobs:
8+
check-docs:
9+
runs-on: ubuntu-latest
10+
strategy:
11+
matrix:
12+
node-version: [22.x]
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-node@v4
16+
with:
17+
node-version: ${{ matrix.node-version }}
18+
cache: 'npm'
19+
- run: npm ci
20+
- run: npx drizzle-kit migrate
21+
env:
22+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
23+
- run: npx tsx ./scripts/checkDocs.ts --write
24+
env:
25+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
26+
- name: Configure git for push
27+
run: |
28+
git remote set-url origin "https://github-actions:${GITHUB_TOKEN}@github.com/${{ github.repository }}"
29+
git config user.name "github-actions[bot]"
30+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
31+
env:
32+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33+
- name: Commit build output
34+
run: |
35+
git add .
36+
git diff --staged --exit-code || (git commit -m "[ci] update revisions.yml" && git push origin main)
37+
# The `||` ensures the commit and push only happen if there are changes (git diff exits with non-zero)

.gitignore

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@
33
/.open-next
44
/cloudflare-env.d.ts
55

6-
# generated docs section file lists (regenerated by npm run generateSections)
7-
/public/docs/**/sections.yml
8-
9-
# generated languages list (regenerated by npm run generateLanguages)
10-
/public/docs/languages.yml
6+
# generated docs section file lists (regenerated by npm run generateDocsMeta)
7+
/public/docs/**/sections.*
8+
/public/docs/languages.*
119

1210
# dependencies
1311
/node_modules
@@ -52,3 +50,4 @@ next-env.d.ts
5250

5351
/public/typescript/
5452
/app/m-plus-rounded-1c-nohint/
53+
node_modules

Dockerfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ WORKDIR /app
66

77
COPY package.json package-lock.json ./
88
COPY packages/jsEval/package.json ./packages/jsEval/
9+
COPY packages/runtime/package.json ./packages/runtime/
910

1011
RUN --mount=type=cache,target=/root/.npm \
1112
npm ci --no-audit --no-fund
@@ -21,7 +22,8 @@ COPY --from=dependencies /app/node_modules ./node_modules
2122
# Copy application source code
2223
COPY . .
2324

24-
ENV NODE_ENV=production
25+
# Stop if documentation has any change that is not reflected to revisions.yml and database.
26+
RUN npx tsx ./scripts/checkDocs.ts --check-diff
2527

2628
# Next.js collects completely anonymous telemetry data about general usage.
2729
# Learn more here: https://nextjs.org/telemetry

README.md

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ npx prisma dev
1818
ルートディレクトリに .env または .env.local という名前のファイルを作成し、以下の内容を記述
1919
```dotenv
2020
API_KEY=GeminiAPIキー
21+
OPENROUTER_API_KEY=OpenRouterAPIキー
22+
OPENROUTER_MODEL=foo;bar
2123
BETTER_AUTH_URL=http://localhost:3000
2224
DATABASE_URL="postgres://... (prisma devの出力)"
2325
GOOGLE_CLIENT_ID=
@@ -26,7 +28,9 @@ GITHUB_CLIENT_ID=
2628
GITHUB_CLIENT_SECRET=
2729
```
2830

29-
* `API_KEY` はGeminiのAPIキーを作成して設定します。未設定の場合チャットが使えません
31+
* チャット用にGeminiのAPIキーまたはOpenRouterのAPIキーのいずれかが必要です。未設定の場合チャットが使えません
32+
* OpenRouterを使う場合は使用するモデルをセミコロン区切りで `OPENROUTER_MODEL` に設定してください (エラー時に2番目以降にフォールバックします)
33+
* 両方設定されている場合はOpenRouterが使われます
3034
* `GITHUB_CLIENT_ID` `GITHUB_CLIENT_SECRET` はGitHub OAuthのクライアントIDとシークレットを設定します。未設定の場合「GitHubでログイン」が使えません。
3135
作り方については https://www.better-auth.com/docs/authentication/github を参照
3236
* `GOOGLE_CLIENT_ID` `GOOGLE_CLIENT_SECRET` はGoogle OAuthのクライアントIDとシークレットを設定します。未設定の場合「Googleでログイン」が使えません。
@@ -54,8 +58,10 @@ npm run lint
5458
```
5559
でコードをチェックします。出てくるwarningやerrorはできるだけ直しましょう。
5660

61+
### データベースのスキーマ
62+
5763
* データベースのスキーマ(./app/schema/hoge.ts)を編集した場合、 `npx drizzle-kit generate` でmigrationファイルを作成し、 `npx drizzle-kit migrate` でデータベースに反映します。
58-
* また、mainにマージする際に本番環境のデータベースにもmigrateをする必要があります
64+
* 本番環境のデータベースのmigrateはmainにpushされた際にGitHub Actionで実行されます
5965
* スキーマのファイルを追加した場合は app/lib/drizzle.ts でimportを追加する必要があります(たぶん)
6066
* `npx prisma dev` で立ち上げたデータベースは `npx prisma dev ls` でデータベース名の確認・ `npx prisma dev rm default` で削除ができるらしい
6167

@@ -72,6 +78,11 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
7278

7379
## ドキュメント
7480

81+
```bash
82+
npm run checkDocs
83+
```
84+
でドキュメントの読み込み時にエラーにならないか確認できます (index.ymlの間違いなど)
85+
7586
* ドキュメントはセクション(見出し)ごとにわけ、 public/docs/言語id/ページid/並び替え用連番-セクション名.md に置く。
7687
* ページはディレクトリの名前によらず 言語id/index.yml に書かれている順で表示される。
7788
* セクションはセクションIDによらずファイル名順で表示される。
@@ -111,6 +122,8 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
111122
* REPLのコード例は1セクションに最大1つまで。
112123
* コードエディターとコード実行ブロックはいくつでも置けます。
113124
* ページ0以外の各ページの最後はレベル2見出し「この章のまとめ」と、レベル3見出し「練習問題n」を置く
125+
* 編集したドキュメントにローカルの開発環境でアクセスする際は `npx tsx ./scripts/checkDocs.ts --write` でrevisions.ymlを更新してください。チャットを正しく動作させるために必要です。基本的には手動でこのファイルを編集する必要はありません。
126+
* 本番環境ではドキュメントの変更がmainブランチにpushされた際に自動で更新されます。gitのコミットidを参照して更新するため、ローカルで更新したrevisions.ymlはpushしないでください。
114127

115128
### ベースとなるドキュメントの作り方
116129

@@ -141,18 +154,17 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
141154
- Canvasを使われた場合はやり直す。(Canvasはファイル名付きコードブロックで壊れる)
142155
- 太字がなぜか `**キーワード**` の代わりに `\*\*キーワード\*\*` となっている場合がある。 `\*\*` → `**` の置き換えで対応
143156
- 見出しの前に `-----` (水平線)が入る場合がある。my.code();は水平線の表示に対応しているが、消す方向で統一
144-
- `言語名-repl` にはページ内で一意なIDを追加する (例: `言語名-repl:1`)
145157
- REPLの出力部分に書かれたコメントは消えるので修正する
146158
- ダメな例
147159
````
148-
```js-repl:1
160+
```js-repl
149161
> console.log("Hello")
150162
Hello // 文字列を表示する
151163
```
152164
````
153165
- 以下のようにすればok
154166
````
155-
```js-repl:1
167+
```js-repl
156168
> console.log("Hello") // 文字列を表示する
157169
Hello
158170
@@ -162,10 +174,11 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
162174
```
163175
````
164176
- 練習問題のファイル名は不都合がなければ `practice(章番号)_(問題番号).拡張子` で統一。空でもよいのでファイルコードブロックとexecコードブロックを置く
165-
- 1章にはたぶん練習問題要らない。
166177

167178
## markdown仕様
168179

180+
実行環境の説明は ./packages/runtime/README.md を参照
181+
169182
````
170183
```言語名-repl
171184
>>> コマンド
@@ -174,10 +187,7 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
174187
````
175188

176189
でターミナルを埋め込む。
177-
* ターミナル表示部は app/terminal/terminal.tsx
178-
* コマンド入力処理は app/terminal/repl.tsx
179-
* 各言語の実行環境は app/terminal/言語名/ 内に書く。
180-
* 実行結果はSectionContextにも送られ、section.tsxからアクセスできる
190+
* 実行結果はEmbedContextにも送られ、チャットフォームが参照できる
181191

182192
````
183193
```言語名:ファイル名
@@ -186,13 +196,12 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
186196
````
187197

188198
でテキストエディターを埋め込む。
189-
* app/terminal/editor.tsx
190-
* editor.tsx内で `import "ace-builds/src-min-noconflict/mode-言語名";` を追加すればその言語に対応した色付けがされる。
199+
* app/terminal/editor.tsx内で `import "ace-builds/src-min-noconflict/mode-言語名";` を追加し、packages/runtime/src/languages.tsにも追加すればその言語に対応した色付けがされる。
191200
* importできる言語の一覧は https://github.com/ajaxorg/ace-builds/tree/master/src-noconflict
192201
* 編集した内容は app/terminal/file.tsx のFileContextで管理される。
193202
* 編集中のコードはFileContextに即時送られる
194203
* FileContextが書き換えられたら即時すべてのエディターに反映される
195-
* 編集したファイルの一覧はSectionContextにも送られ、section.tsxからアクセスできる
204+
* 編集したファイルの一覧はEmbedContextにも送られ、チャットフォームが参照できる
196205

197206
````
198207
```言語名-readonly:ファイル名
@@ -210,8 +219,7 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
210219

211220
で実行ボタンを表示する
212221
* 実行ボタンを押した際にFileContextからファイルを読み、実行し、結果を表示する
213-
* app/terminal/exec.tsx に各言語ごとの実装を書く (それぞれ app/terminal/言語名/ 内に定義した関数を呼び出す)
214-
* 実行結果はSectionContextにも送られ、section.tsxからアクセスできる
222+
* 実行結果はEmbedContextにも送られ、チャットフォームが参照できる
215223

216224

217225
## 技術スタック・ドキュメント・メモ

0 commit comments

Comments
 (0)