Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
a725269
fixed #503
daisukenishino2 Dec 18, 2025
c905153
fixed #504
daisukenishino2 Mar 10, 2026
9226d20
Bump log4net to 3.3.0
dependabot[bot] Apr 14, 2026
c2417ab
Bump System.Security.Cryptography.Xml from 9.0.4 to 9.0.15
dependabot[bot] Apr 14, 2026
d258554
Merge pull request #506 from OpenTouryoProject/dependabot/nuget/root/…
daisukenishino2 Jul 31, 2026
b8ce65b
Merge pull request #507 from OpenTouryoProject/dependabot/nuget/root/…
daisukenishino2 Jul 31, 2026
fbc2656
Bump System.Security.Cryptography.Xml from 9.0.6 to 9.0.18
dependabot[bot] Jul 31, 2026
c61e75e
初agent:MDファイルを追加しビルドプロセスを修正した。
daisukenishino2 Jul 31, 2026
1fe7194
Merge branch 'develop' of https://github.com/OpenTouryoProject/OpenTo…
daisukenishino2 Jul 31, 2026
ba448ed
agent:MDファイルを追加しビルドプロセスを修正2
daisukenishino2 Jul 31, 2026
d012997
ビルドプロセスのエンハンス中
daisukenishino2 Jul 31, 2026
7ced73c
紆余曲折削除など
daisukenishino2 Jul 31, 2026
4f75a08
fixed #509
daisukenishino2 Jul 31, 2026
f06b7be
fixing #508
daisukenishino2 Jul 31, 2026
fd4f5a5
fixing #508
daisukenishino2 Jul 31, 2026
8b7b2e5
fixed #508
daisukenishino2 Jul 31, 2026
f05deb0
エージェントの更新者名
daisukenishino2 Jul 31, 2026
8e0324e
fixed #501
daisukenishino2 Jul 31, 2026
9840722
fixed #512
daisukenishino2 Jul 31, 2026
53f0edf
fixed #405
daisukenishino2 Aug 1, 2026
f3a650e
fixed #374
daisukenishino2 Aug 1, 2026
dcee38f
ルールのメンテナンス
daisukenishino2 Aug 1, 2026
6b91667
fixing #513 - Stage 1
daisukenishino2 Aug 1, 2026
5fcf0dd
fixing #513 - Stage 2
daisukenishino2 Aug 1, 2026
b61ba5e
fixing #513 - Stage 3
daisukenishino2 Aug 1, 2026
fdc45c5
fixing #513 - Stage 4
daisukenishino2 Aug 1, 2026
7ba2657
fixing #513
daisukenishino2 Aug 1, 2026
4012d94
fixing #513
daisukenishino2 Aug 1, 2026
02d083f
fixing #513
daisukenishino2 Aug 1, 2026
66629fb
fixing #513
daisukenishino2 Aug 1, 2026
a53c601
fixed #513
daisukenishino2 Aug 1, 2026
db29268
fixed #515
daisukenishino2 Aug 2, 2026
4f592b5
DaoGen_Tool\README.md 追加
daisukenishino2 Aug 2, 2026
32001ac
README
daisukenishino2 Aug 2, 2026
34088cc
README
daisukenishino2 Aug 2, 2026
80d4b69
README
daisukenishino2 Aug 2, 2026
97638cd
CONTRIBUTING
daisukenishino2 Aug 2, 2026
9da14f2
AGENTS
daisukenishino2 Aug 2, 2026
356b0e8
Merge pull request #511 from OpenTouryoProject/1st_agent
daisukenishino2 Aug 2, 2026
7bc2525
moved
daisukenishino2 Aug 3, 2026
7663323
moved
daisukenishino2 Aug 3, 2026
8574884
メンテ
daisukenishino2 Aug 4, 2026
dc42346
fixing #517
daisukenishino2 Aug 5, 2026
d15736a
残件対応
daisukenishino2 Aug 5, 2026
fed9389
Merge pull request #518 from OpenTouryoProject/2nd_agent
daisukenishino2 Aug 5, 2026
6056f03
fixing #517
daisukenishino2 Aug 5, 2026
2e31def
Merge pull request #519 from OpenTouryoProject/2nd_agent
daisukenishino2 Aug 5, 2026
3b14463
fixing #517
daisukenishino2 Aug 5, 2026
b59cfb7
fixing #517
daisukenishino2 Aug 5, 2026
d853ea5
fixing #517
daisukenishino2 Aug 5, 2026
4d77ac7
fixing #517
daisukenishino2 Aug 5, 2026
a7c612d
fixing #517
daisukenishino2 Aug 5, 2026
fc9141a
fixed #517
daisukenishino2 Aug 5, 2026
438cf8e
...漏れ...
daisukenishino2 Aug 5, 2026
811c43f
Merge pull request #521 from OpenTouryoProject/deps
daisukenishino2 Aug 5, 2026
cf0db49
検証作業
daisukenishino2 Aug 5, 2026
7a561a7
fixing #517
daisukenishino2 Aug 5, 2026
7c86552
fixed としたいが諸事情あり後のチェック後に手動でCloseする。
daisukenishino2 Aug 5, 2026
65613d5
fixing #520
daisukenishino2 Aug 5, 2026
7817201
fixing #520
daisukenishino2 Aug 5, 2026
ecfe4af
fixing #520
daisukenishino2 Aug 5, 2026
6172042
fixing #520
daisukenishino2 Aug 5, 2026
06bdffa
fixing #520
daisukenishino2 Aug 5, 2026
08b4068
fixed #520
daisukenishino2 Aug 5, 2026
10cf738
fixing #520
daisukenishino2 Aug 5, 2026
b134197
fixing #520
daisukenishino2 Aug 5, 2026
2fe5f30
fixed #520
daisukenishino2 Aug 6, 2026
3b30021
fixed #520
daisukenishino2 Aug 6, 2026
6b34b82
Merge pull request #523 from OpenTouryoProject/2nd_agent
daisukenishino2 Aug 6, 2026
2dc5aff
fixing #522
daisukenishino2 Aug 6, 2026
b10374c
fixing #522
daisukenishino2 Aug 6, 2026
06fa849
fixing #522
daisukenishino2 Aug 6, 2026
b0fa91b
fixing #522
daisukenishino2 Aug 6, 2026
df9a7f5
fixed #520
daisukenishino2 Aug 6, 2026
2f3748c
漏れ #522
daisukenishino2 Aug 6, 2026
08f28bd
漏れ #522
daisukenishino2 Aug 7, 2026
81915de
fixed #522
daisukenishino2 Aug 7, 2026
defcc4e
Merge pull request #525 from OpenTouryoProject/2nd_agent
daisukenishino2 Aug 7, 2026
d624fa2
MDファイル更新
daisukenishino2 Aug 7, 2026
aadf304
Merge pull request #510 from OpenTouryoProject/dependabot/nuget/root/…
daisukenishino2 Aug 7, 2026
2585cf3
fixing #524
daisukenishino2 Aug 7, 2026
3dab31b
fixing #524
daisukenishino2 Aug 7, 2026
c1c4538
Merge pull request #526 from OpenTouryoProject/deps
daisukenishino2 Aug 7, 2026
ea05d4c
Merge branch 'develop' of https://github.com/OpenTouryoProject/OpenTo…
daisukenishino2 Aug 7, 2026
4a5e214
Merge pull request #527 from OpenTouryoProject/2nd_agent
daisukenishino2 Aug 7, 2026
137f31e
NU1903残
daisukenishino2 Aug 7, 2026
3c5581b
Merge pull request #529 from OpenTouryoProject/deps
daisukenishino2 Aug 7, 2026
4550aca
fixing #528
daisukenishino2 Aug 7, 2026
a58c84d
fixing #528
daisukenishino2 Aug 7, 2026
2ad17f7
fixing #528
daisukenishino2 Aug 8, 2026
21949c1
fixing #528
daisukenishino2 Aug 8, 2026
9e7f431
fixing #528
daisukenishino2 Aug 8, 2026
73fc263
fixing #528
daisukenishino2 Aug 8, 2026
9a3120a
fixing #528
daisukenishino2 Aug 8, 2026
4ea2d5c
fixing #528
daisukenishino2 Aug 8, 2026
20680fe
fixing #528
daisukenishino2 Aug 8, 2026
af6de95
fixing #528
daisukenishino2 Aug 8, 2026
0bbc9f4
fixing #528
daisukenishino2 Aug 8, 2026
6e51cfe
fixing #528
daisukenishino2 Aug 8, 2026
9dc9375
fixed #528
daisukenishino2 Aug 8, 2026
650aeeb
Merge pull request #530 from OpenTouryoProject/2nd_agent
daisukenishino2 Aug 8, 2026
f2d0bba
fixing #531
daisukenishino2 Aug 9, 2026
6952e01
fixing #531
daisukenishino2 Aug 9, 2026
f1b60e8
fixing #531
daisukenishino2 Aug 9, 2026
628fc1d
fixing #531
daisukenishino2 Aug 9, 2026
c2c92c7
fixing #531
daisukenishino2 Aug 9, 2026
d32ae55
fixing #531
daisukenishino2 Aug 9, 2026
17347a0
fixing #531
daisukenishino2 Aug 9, 2026
7b595d1
fixing #531
daisukenishino2 Aug 9, 2026
9a8771b
fixing #531
daisukenishino2 Aug 9, 2026
7337c01
fixing #531
daisukenishino2 Aug 9, 2026
10750ab
fixing #531
daisukenishino2 Aug 9, 2026
b94fcd8
fixing #531
daisukenishino2 Aug 9, 2026
41bffaf
fixing #531
daisukenishino2 Aug 9, 2026
8e2a749
fixing #531
daisukenishino2 Aug 9, 2026
94f1ed7
fixing #531
daisukenishino2 Aug 9, 2026
501ffab
fixing #531
daisukenishino2 Aug 9, 2026
a204469
fixing #531
daisukenishino2 Aug 9, 2026
792c251
fixed #531
daisukenishino2 Aug 9, 2026
726d36d
fixed #532
daisukenishino2 Aug 9, 2026
667a925
CODING.md
daisukenishino2 Aug 9, 2026
2362d43
fixed #533
daisukenishino2 Aug 9, 2026
8f9141d
Merge pull request #534 from OpenTouryoProject/3rd_agent
daisukenishino2 Aug 9, 2026
059562b
CHEATSHEET.md
daisukenishino2 Aug 10, 2026
d34937a
GitHub機能活用
daisukenishino2 Aug 10, 2026
28d062e
Merge pull request #535 from OpenTouryoProject/3rd_agent
daisukenishino2 Aug 10, 2026
08ac336
GitHubUsage.md
daisukenishino2 Aug 10, 2026
081c80a
CodeQL対応1
daisukenishino2 Aug 10, 2026
636d518
CodeQL対応2
daisukenishino2 Aug 10, 2026
24e4e8a
fixed #536
daisukenishino2 Aug 10, 2026
b33b64e
Merge pull request #537 from OpenTouryoProject/3rd_agent
daisukenishino2 Aug 10, 2026
c36a662
続・GitHubUsage.md
daisukenishino2 Aug 10, 2026
93adb61
Merge pull request #538 from OpenTouryoProject/3rd_agent
daisukenishino2 Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
49 changes: 49 additions & 0 deletions .github/secret_scanning.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# --------------------------------------------------
# Secret scanning のアラートから除外するパス
#
# ここに書いたパスは「アラートを出さない」だけである。
# **Push protection には効かない。** Push protection は除外設定を見ず、
# 検知したら push を止める(通したい場合はバイパスする)。
#
# したがって本ファイルの目的は、
# **テスト専用の資材で Security タブが埋まり、本物が見えなくなるのを防ぐこと**にある。
#
# 参考: https://docs.github.com/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/excluding-folders-and-files-from-secret-scanning
# --------------------------------------------------
paths-ignore:

# --------------------------------------------------
# 暗号・署名テスト用の証明書と秘密鍵(19 件)
#
# Public.Security(JWT / JWS / JWE / 鍵交換 / X.509)のテストと、
# サンプルの SSL/TLS・クライアント証明書認証で使う。
# **すべてテスト専用の自己署名で、実運用の証明書は含まない。**
#
# 実体は次で参照される。
# Frameworks/Tests/EncAndDecUtil, EncAndDecUtilCUI
# Frameworks/Tests/TestCode
# Samples/WS_sample ほか
# --------------------------------------------------
- "root/files/resource/X509/**"

# --------------------------------------------------
# ClickOnce の署名用(テンポラリ キー)
#
# WSClientWinCone_sample.csproj が拇印で証明書ストアを検索するため、
# 当該証明書が無い環境ではビルドできない(BUILDING.md 4 節)。
# 検証 3 本では MSB3482 / MSB3325 / MSB3321 を既知として除外している。
# --------------------------------------------------
- "root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample_TemporaryKey.pfx"

# --------------------------------------------------
# ここに足していないもの、と その理由
#
# ・テスト・サンプルの接続文字列(Password= を含む app.config / appsettings.json、49 件)
# Non-provider patterns(汎用のパスワードらしき文字列)を**無効のまま**にしていれば
# 検知されない。既定は無効。
# 広く paths-ignore に足すと、本物を取りこぼす側のリスクが上がるため入れない。
#
# ・Frameworks/Tests/** や Samples/** をまとめて除外すること
# 範囲が広すぎる。**本物のキーを誤って置いたときに気付けなくなる。**
# 除外は「中身が分かっているファイル」に限る。
# --------------------------------------------------
279 changes: 279 additions & 0 deletions .github/workflows/build-windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,279 @@
# 受けブランチ(deps)に入った変更を windows-latest で検証する。
#
# <位置づけ>
# リリース時の検証 3 本(RELEASE.md 3 節)を、そのまま順に実行する。
# 1_BuildAll.ps1 全ビルド
# 2_RunAllTests.ps1 単体テスト
# 3_SmokeTest.ps1 サンプルの疎通
# 「何をビルドするか」の正はバッチ側、「合否の判定」の正は各 .ps1 にある。
# ここには判定を書かない(書くと二重管理になる)。
# 順序も入れ替えない(1 のクリーンとアセンブリ配置が 2・3 の前提になる)。
#
# <対象外>
# ・GUI アプリケーション(WinForms / WPF / 各ツールの画面)… RELEASE.md 4 節の手作業
# ・SQL Server 以外の DBMS への接続 … 自動テストは /Dap SQL のみを使う
# (TestSQLUtility は 4 DBMS の SQL 生成を検証するが、接続はしない)
#
# <署名エラーを除外している理由>
# WSClientWinCone_sample.csproj は ClickOnce の署名が有効で、証明書を拇印で指定し、
# 同梱の .pfx はパスワード保護されている。実行のたびに作り直される CI では用意できない。
#
# ローカルと CI で出るコードが違うことに注意する。
# ローカル : MSB3482(マニフェストの署名で失敗)
# … .pfx が既にキー コンテナへ取り込まれており、最後の署名まで進むため
# CI : MSB3325 / MSB3321(キー ファイルの取り込みで失敗)
# … ResolveKeySource が .pfx を取り込めず、署名に到達しないため
#
# このため 3 つのコードを対象にし、さらに当該プロジェクトに限定する。
# 除外した内容はログに一覧されるので、握り潰しにはならない。

name: Build on Windows

on:
push:
branches: [deps]
# master 宛の PR ではリリースの関所として動かす。
#
# ・master へのマージは develop からのリリース時だけで、往復しない。
# 1 回あたり 10 分前後の待ちは受け入れられる。
# ・RELEASE.md フェーズ 1 の「検証 3 本」を機械的に担保する。
#
# develop は対象にしない。deps ⇔ develop ⇔ feature と往復が多く、
# 毎回のマージが CI 待ちになる。deps 由来の変更は deps で検証済みでもある。
pull_request:
branches: [master]
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: windows-latest
# ローカルの実測はビルド 5.8 分+テスト 1.3 分。DB の導入と初期化を足して余裕を持たせる。
timeout-minutes: 120

env:
# ankane/setup-sqlserver が設定する既定のパスワード。
INITIAL_SA_PASSWORD: 'YourStrong!Passw0rd'
# テストとサンプルの構成ファイルに直書きされている値。
# Data Source=localhost;Initial Catalog=Northwind;User ID=sa;Password=seigi@123;Encrypt=false;
# 構成側を CI 用に書き換えると「実際に使われる設定」と乖離するため、DB 側を合わせる。
SA_PASSWORD: 'seigi@123'
# LocalServicesOnDocker の docker-compose.yml が指定する照合順序と同じ。
COLLATION: 'Japanese_CI_AS'

steps:
- name: Checkout
uses: actions/checkout@v7

# 1_BuildAll.ps1 は git を使わないため、既定の浅い clone のままでよい。
# 2_RunAllTests.ps1 は git show HEAD: で期待値を取るが、これも浅い clone で足りる。
- name: Build all
shell: pwsh
working-directory: root/programs
run: .\1_BuildAll.ps1 -OutputDir "${{ runner.temp }}\BuildLogs" -IgnoreErrors 'error MSB(3482|3325|3321):.*WSClientWinCone_sample\.csproj'

# ------------------------------------------------------------------
# 単体テストのための SQL Server
# ------------------------------------------------------------------
# LocalServicesOnDocker の docker-compose はそのままでは使えない。
# sqlserver サービスが Linux イメージ(mcr.microsoft.com/mssql/server)で、
# windows-latest は Linux コンテナを動かせないため(多段のネストができない)。
# 代わりに runner へ直接 SQL Server を入れ、同リポジトリの instnwnd.sql だけを使う。
#
# 第三者のアクションなのでコミットで固定する(v1 はタグではなくブランチ)。
- name: Install SQL Server
uses: ankane/setup-sqlserver@82b78e23506d0c8acfb64e05728ac450ff8a98c6 # v1
with:
accept-eula: true
sqlserver-version: 2022

- name: Set up Northwind
shell: pwsh
env:
# LocalServicesOnDocker のコミットに固定する。
# 中身は Microsoft 公式の Northwind DDL(約 1 MB)。
NORTHWIND_URL: https://raw.githubusercontent.com/NetDevInfraWGinOSSConsortium/LocalServicesOnDocker/90763cd5f2aa681b1172d9277a2b133514fdaebe/sqlserver/init/instnwnd.sql
run: |
$ErrorActionPreference = 'Stop'

# sqlcmd 18 以降は既定で暗号化するため -C(サーバー証明書を信頼)が要る。
# 旧版は -C を解釈しないので、使えるかどうかを一度だけ判定する。
$cflag = @()
& sqlcmd -S localhost -U sa -P $env:INITIAL_SA_PASSWORD -C -Q "SELECT 1" *> $null
if ($LASTEXITCODE -eq 0) { $cflag = @('-C') }

function Invoke-Sql
{
param([string]$Password, [string]$Database, [string]$Query, [string]$File, [switch]$Raw)

$a = @('-S', 'localhost', '-U', 'sa', '-P', $Password, '-b') + $cflag
if ($Database) { $a += @('-d', $Database) }
if ($Raw) { $a += @('-h', '-1', '-W') }
if ($Query) { $a += @('-Q', $Query) }
if ($File) { $a += @('-i', $File) }
& sqlcmd @a
}

# 構成ファイルに合わせてパスワードを変更する。
Write-Host "sa のパスワードを構成ファイルに合わせます。"
Invoke-Sql -Password $env:INITIAL_SA_PASSWORD -Query "ALTER LOGIN sa WITH PASSWORD = '$($env:SA_PASSWORD)'"
if ($LASTEXITCODE -ne 0) { throw "sa のパスワードを変更できませんでした。" }

$sql = Join-Path $env:RUNNER_TEMP 'instnwnd.sql'
Invoke-WebRequest -Uri $env:NORTHWIND_URL -OutFile $sql
Write-Host ("instnwnd.sql を取得しました({0:N0} バイト)。" -f (Get-Item $sql).Length)

# instnwnd.sql は DB を作らない(対象 DB の中で実行する)ため、先に CREATE する。
# 照合順序は DB 既定として与える。Northwind の列は COLLATE 句を持たないので、
# 各列がこれを継承する。
#
# 起動直後は一部のバッチが失敗して不完全なロードになることがあるため
# (表だけできてデータが入らない等)、Shippers が 3 行あるかで検証して再試行する。
# 判定方法は LocalServicesOnDocker の start-up.sh に合わせている。
$loaded = $false

foreach ($attempt in 1..3)
{
Write-Host "Northwind をロードします($attempt 回目)。"

# ヒアストリングは使わない。YAML のブロック スカラーはインデントを
# 剥がすため、終端の "@ を行頭に置く必要があり、桁が衝突する。
$drop = "IF DB_ID('Northwind') IS NOT NULL BEGIN ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE Northwind; END;"
$create = "CREATE DATABASE Northwind COLLATE $($env:COLLATION);"

Invoke-Sql -Password $env:SA_PASSWORD -Query "$drop $create"
Invoke-Sql -Password $env:SA_PASSWORD -Database Northwind -File $sql *> $null

$n = (Invoke-Sql -Password $env:SA_PASSWORD -Database Northwind -Raw `
-Query "SET NOCOUNT ON; SELECT COUNT(*) FROM dbo.Shippers") -join ''
if ($n.Trim() -eq '3') { $loaded = $true; break }

Write-Host " ロードが不完全です。再試行します。"
}

if (-not $loaded) { throw "Northwind のロードが完了しませんでした。" }

# Northwind 標準には無い表。3_SmokeTest.ps1 の RerunnableBatch 系が使う。
# (Orders 830 件を読んで Orders2 へ INSERT する。空にするのはスクリプト側の役目)
#
# 3_SmokeTest.ps1 も無ければ作るため、ここは無くても通る。
# それでも流しておくのは、DB の準備をこのステップに閉じるため
# (疎通確認より前に、表が揃っていることを確かめられる)。
# なお sqlcmd は GO をそのまま解釈できる。SqlClient で流すスクリプト側は
# 自前で分割している。
$orders2 = 'root/programs/CS/Samples/Bat_sample/RerunnableBatch_sample/CREATE ORDERS2.sql'
Invoke-Sql -Password $env:SA_PASSWORD -Database Northwind -File $orders2 *> $null

# 初期状態の確認(RELEASE.md 2 節と同じ観点)。
$orders = (Invoke-Sql -Password $env:SA_PASSWORD -Database Northwind -Raw `
-Query "SET NOCOUNT ON; SELECT COUNT(*) FROM dbo.Orders") -join ''
Write-Host ("Northwind 準備完了 : Shippers=3 Orders={0}" -f $orders.Trim())

# ------------------------------------------------------------------
# テストが前提とする環境(C:\root と日本語ロケール)
# ------------------------------------------------------------------
- name: Set up C:\root and locale
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'

# 構成ファイルが C:\root\files\... を絶対パスで参照している。
# TestCode/App.config FxXMLMSGDefinition / FxXMLSPDefinition
# SimpleBatch/app.config SqlTextFilePath
# 無いと GetMessage が空を返し、SimpleBatch は
# resource file [...] was not found
# で失敗する。コピーではなくジャンクションにして、実体を 1 つに保つ。
if (-not (Test-Path 'C:\root'))
{
New-Item -ItemType Junction -Path 'C:\root' `
-Target (Join-Path $env:GITHUB_WORKSPACE 'root') | Out-Null
}

foreach ($p in @('C:\root\files\resource\Sql',
'C:\root\files\resource\Xml\MSGDefinition.xml',
'C:\root\files\resource\Xml\SPDefinition.xml'))
{
if (-not (Test-Path $p)) { throw "$p が見つかりません。" }
}
Write-Host "C:\root を配置しました。"

# 期待値は日本語環境で生成されている。runner の既定は en-US で、
# 「書式」と「言語」の両方がずれる。両方を合わせる必要がある。
#
# <CurrentCulture(書式)>
# 期待 : <DATE> 0:00:00 実測 : 4/24/1977 12:00:00 AM
# CompareResult.ps1 の <DATE> は \d{4}/\d{1,2}/\d{1,2} で、
# 1977/4/24 の形にしか一致しない。
#
# <CurrentUICulture(言語)>
# ここでは直せない。試して駄目だったものは BUILDING.md 9 節に記録した。
# Install-Language … ハング(run 30976630947)
# Set-WinUILanguageOverride … 言語パックの導入が前提
# PreferredUILanguages を直書き … 未インストールの言語は無視される
# 言語に依存する 2 か所は、リポジトリ側で処理している。
# GetMessage … TestCode の構成に FxBusinessMessageCulture=ja-JP を指定
# OS のメッセージ … CompareResult.ps1 で <OSMSG> に正規化
Set-Culture ja-JP

# Set-Culture はレジストリを書き換えるだけで、現在のセッションには反映されない。
# 効いたかどうかを子プロセスで確認する(UICulture は en-US のままが正常)。
$c = & powershell -NoProfile -Command "(Get-Culture).Name + ' / ' + (Get-UICulture).Name"
Write-Host ("新しいプロセスの Culture / UICulture : {0}" -f $c)

- name: Run all tests
shell: pwsh
working-directory: root/programs
run: .\2_RunAllTests.ps1 -OutputDir "${{ runner.temp }}\TestResults"

# ------------------------------------------------------------------
# 疎通(3_SmokeTest.ps1)
# ------------------------------------------------------------------
# 3_SmokeTest.ps1 はサービスの開始を自分では行わない。システムの状態を変える
# 操作だからで、足りない場合は対処方法を示して NG にする(AGENTS.md の線引き)。
# runner は使い捨てで、この判断が当てはまらないため、ここで開始する。
- name: Start aspnet_state
shell: pwsh
run: |
Start-Service aspnet_state
Write-Host ("aspnet_state : {0}" -f (Get-Service aspnet_state).Status)

# IIS Express は windows-latest(win25-vs2026)に同梱されている。
# C:\Program Files\IIS Express\iisexpress.exe v10.0.26013.1000
# 3_SmokeTest.ps1 が見るのも %ProgramFiles% 側なので、そのまま使える。
- name: Smoke test
shell: pwsh
working-directory: root/programs
run: .\3_SmokeTest.ps1 -OutputDir "${{ runner.temp }}\SmokeTest"

# 失敗時こそ中身を見たいので、常に採取する。
- name: Upload build logs
if: always()
uses: actions/upload-artifact@v7
with:
name: build-logs
path: ${{ runner.temp }}\BuildLogs
if-no-files-found: warn

# 期待値(HEAD 版)・ビルド ログ・再生成された実測値をまとめて採取する。
# 差分が出たときは、この 2 つを突き合わせて原因を切り分ける。
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results
path: |
${{ runner.temp }}\TestResults
root/programs/CS/Frameworks/Tests/**/Result*.txt
if-no-files-found: warn

# 疎通は期待結果ファイルを持たないため、判定は各対象の標準出力に残る。
# Web 系は IIS Express の起動ログもここに入る。
- name: Upload smoke test logs
if: always()
uses: actions/upload-artifact@v7
with:
name: smoke-logs
path: ${{ runner.temp }}\SmokeTest
if-no-files-found: warn
45 changes: 45 additions & 0 deletions .github/workflows/dependabot-retarget.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Dependabot が作成した PR のベース ブランチを deps へ振り替える。
#
# <なぜ必要か>
# Dependabot のセキュリティ アップデートは、既定ブランチ(develop)にしか
# PR を出さない。dependabot.yml の target-branch はバージョン更新にしか
# 効かないため、受けブランチへ向けるにはこの方法しかない。
#
# <なぜ pull_request_target か>
# Dependabot が起こしたイベントでは GITHUB_TOKEN が既定で read-only になり、
# base の書き換えができない。pull_request_target は read-write にできる。
#
# <安全性>
# pull_request_target は「ベース ブランチ側の定義」を書き込み権限付きで動かす。
# ここで PR のコードを checkout して実行すると、PR に任意のコードを書ける相手へ
# 権限を渡すことになる(pwn request)。
# 本ワークフローは checkout を行わず、gh コマンドだけを実行する。
# 権限も pull-requests: write の 1 つだけに絞る。

name: Retarget Dependabot PRs to deps

on:
pull_request_target:
types: [opened]

permissions:
pull-requests: write

jobs:
retarget:
# develop 宛の Dependabot の PR だけを対象にする。
# base の判定を入れているのは、既に deps 宛のものを再度書き換えないため。
if: >-
github.actor == 'dependabot[bot]' &&
github.event.pull_request.base.ref == 'develop'
runs-on: ubuntu-latest

steps:
- name: Change base branch to deps
# 値は env 経由で渡す。run: に ${{ }} を直接書くと、
# 値の内容がシェルのコマンドとして解釈される余地が残る。
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: gh pr edit "$PR_NUMBER" --repo "$REPO" --base deps
Loading
Loading