Skip to content

Commit 21af80d

Browse files
committed
Fix CI test workflows to work properly
- Add baseline schemas for all database tests - Use baseline-schema-file parameter to enable comparison mode - Skip PR comment posting when baseline file is explicitly provided - Fix SQLite schema syntax (remove IF NOT EXISTS, use TEXT for timestamps) - Add MSSQL test workflow with 2019 version - Tests now properly compare baseline vs desired schemas
1 parent 309db9f commit 21af80d

File tree

6 files changed

+161
-14
lines changed

6 files changed

+161
-14
lines changed

.github/workflows/ci.yaml

Lines changed: 126 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,24 @@ jobs:
8080
CREATE INDEX IF NOT EXISTS idx_posts_published_at ON posts(published_at);
8181
EOF
8282
83+
- name: Create baseline schema
84+
run: |
85+
cat > baseline.sql <<EOF
86+
CREATE TABLE IF NOT EXISTS users (
87+
id SERIAL PRIMARY KEY,
88+
username VARCHAR(50) UNIQUE NOT NULL,
89+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
90+
);
91+
EOF
92+
8393
- name: Test PostgreSQL action (dry-run)
8494
uses: ./
95+
env:
96+
GITHUB_EVENT_NAME: push
8597
with:
8698
command: psqldef
8799
version: latest
100+
baseline-schema-file: baseline.sql
88101
schema-file: schema.sql
89102
pg-user: postgres
90103
pg-password: postgres
@@ -136,11 +149,24 @@ jobs:
136149
);
137150
EOF
138151
152+
- name: Create baseline schema
153+
run: |
154+
cat > baseline.sql <<EOF
155+
CREATE TABLE IF NOT EXISTS users (
156+
id INT AUTO_INCREMENT PRIMARY KEY,
157+
username VARCHAR(50) UNIQUE NOT NULL,
158+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
159+
);
160+
EOF
161+
139162
- name: Test MySQL action
140163
uses: ./
164+
env:
165+
GITHUB_EVENT_NAME: push
141166
with:
142167
command: mysqldef
143168
version: latest
169+
baseline-schema-file: baseline.sql
144170
schema-file: schema.sql
145171
mysql-user: root
146172
mysql-password: root
@@ -158,30 +184,123 @@ jobs:
158184
- name: Create SQLite test schema file
159185
run: |
160186
cat > schema.sql <<EOF
161-
CREATE TABLE IF NOT EXISTS users (
187+
CREATE TABLE users (
162188
id INTEGER PRIMARY KEY AUTOINCREMENT,
163189
username TEXT UNIQUE NOT NULL,
164190
email TEXT UNIQUE NOT NULL,
165-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
191+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
166192
);
167193
168-
CREATE TABLE IF NOT EXISTS posts (
194+
CREATE TABLE posts (
169195
id INTEGER PRIMARY KEY AUTOINCREMENT,
170196
user_id INTEGER REFERENCES users(id),
171197
title TEXT NOT NULL,
172198
content TEXT,
173-
published_at TIMESTAMP,
174-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
199+
published_at TEXT,
200+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
175201
);
176202
177-
CREATE INDEX IF NOT EXISTS idx_posts_user_id ON posts(user_id);
178-
CREATE INDEX IF NOT EXISTS idx_posts_published_at ON posts(published_at);
203+
CREATE INDEX idx_posts_user_id ON posts(user_id);
204+
CREATE INDEX idx_posts_published_at ON posts(published_at);
205+
EOF
206+
207+
- name: Create baseline schema
208+
run: |
209+
cat > baseline.sql <<EOF
210+
CREATE TABLE users (
211+
id INTEGER PRIMARY KEY AUTOINCREMENT,
212+
username TEXT UNIQUE NOT NULL,
213+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
214+
);
179215
EOF
180216
181217
- name: Test SQLite action
182218
uses: ./
219+
env:
220+
GITHUB_EVENT_NAME: push
183221
with:
184222
command: sqlite3def
185223
version: latest
224+
baseline-schema-file: baseline.sql
186225
schema-file: schema.sql
187226
sqlite-database: test.db
227+
228+
test-mssql:
229+
runs-on: ubuntu-latest
230+
continue-on-error: true
231+
232+
services:
233+
sqlserver:
234+
image: mcr.microsoft.com/mssql/server:2019-CU32-ubuntu-20.04
235+
env:
236+
ACCEPT_EULA: Y
237+
SA_PASSWORD: YourStrong@Passw0rd
238+
MSSQL_PID: Developer
239+
options: >-
240+
--health-cmd "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Passw0rd' -Q 'SELECT 1'"
241+
--health-interval 10s
242+
--health-timeout 5s
243+
--health-retries 10
244+
ports:
245+
- 1433:1433
246+
247+
steps:
248+
- name: Checkout code
249+
uses: actions/checkout@v5
250+
251+
- name: Wait for SQL Server
252+
run: |
253+
for i in {1..30}; do
254+
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Passw0rd' -Q 'SELECT 1' && break
255+
echo "Waiting for SQL Server..."
256+
sleep 2
257+
done
258+
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Passw0rd' -Q "CREATE DATABASE testdb"
259+
260+
- name: Create test schema file
261+
run: |
262+
cat > schema.sql <<EOF
263+
CREATE TABLE users (
264+
id INT IDENTITY(1,1) PRIMARY KEY,
265+
username NVARCHAR(50) UNIQUE NOT NULL,
266+
email NVARCHAR(100) UNIQUE NOT NULL,
267+
created_at DATETIME2 DEFAULT GETDATE()
268+
);
269+
270+
CREATE TABLE posts (
271+
id INT IDENTITY(1,1) PRIMARY KEY,
272+
user_id INT FOREIGN KEY REFERENCES users(id),
273+
title NVARCHAR(200) NOT NULL,
274+
content NTEXT,
275+
published_at DATETIME2,
276+
created_at DATETIME2 DEFAULT GETDATE()
277+
);
278+
279+
CREATE INDEX idx_posts_user_id ON posts(user_id);
280+
CREATE INDEX idx_posts_published_at ON posts(published_at);
281+
EOF
282+
283+
- name: Create baseline schema
284+
run: |
285+
cat > baseline.sql <<EOF
286+
CREATE TABLE users (
287+
id INT IDENTITY(1,1) PRIMARY KEY,
288+
username NVARCHAR(50) UNIQUE NOT NULL,
289+
created_at DATETIME2 DEFAULT GETDATE()
290+
);
291+
EOF
292+
293+
- name: Test MSSQL action
294+
uses: ./
295+
env:
296+
GITHUB_EVENT_NAME: push
297+
with:
298+
command: mssqldef
299+
version: latest
300+
baseline-schema-file: baseline.sql
301+
schema-file: schema.sql
302+
mssql-user: sa
303+
mssql-password: YourStrong@Passw0rd
304+
mssql-host: localhost
305+
mssql-port: 1433
306+
mssql-database: testdb

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CLAUDE.md

CLAUDE.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
This is a GitHub Action project implemented in TypeScript.
2+
3+
## General Rules
4+
5+
*
6+
7+
## Before commit
8+
9+
* Run `npm run all`, `git add dist`, and then commit the changes.

dist/index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,10 @@ async function run() {
268268
core.info(`Downloaded ${command} to ${binaryPath}`);
269269
const config = getCommandConfig(command);
270270
const context = github.context;
271-
if (context.eventName === "pull_request" || baselineSchemaFile) {
271+
// Use baseline comparison when:
272+
// 1. It's a pull request event AND no baseline file is provided
273+
// 2. A baseline file is explicitly provided
274+
if ((context.eventName === "pull_request" && !baselineSchemaFile) || baselineSchemaFile) {
272275
let actualBaselineFile = baselineSchemaFile;
273276
if (!actualBaselineFile) {
274277
const baseBranch = context.payload.pull_request.base.ref;
@@ -295,11 +298,17 @@ async function run() {
295298
if (output.trim()) {
296299
core.info("Schema changes detected:");
297300
core.info(output);
298-
await createComment(output);
301+
// Only create comment for actual PR events
302+
if (context.eventName === "pull_request" && !baselineSchemaFile) {
303+
await createComment(output);
304+
}
299305
}
300306
else {
301307
core.info("No schema changes detected");
302-
await createComment("No schema changes detected.");
308+
// Only create comment for actual PR events
309+
if (context.eventName === "pull_request" && !baselineSchemaFile) {
310+
await createComment("No schema changes detected.");
311+
}
303312
}
304313
if (!baselineSchemaFile && actualBaselineFile && actualBaselineFile !== "" && fs.existsSync(actualBaselineFile)) {
305314
fs.unlinkSync(actualBaselineFile);

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,10 @@ async function run(): Promise<void> {
263263

264264
const context = github.context;
265265

266-
if (context.eventName === "pull_request" || baselineSchemaFile) {
266+
// Use baseline comparison when:
267+
// 1. It's a pull request event AND no baseline file is provided
268+
// 2. A baseline file is explicitly provided
269+
if ((context.eventName === "pull_request" && !baselineSchemaFile) || baselineSchemaFile) {
267270
let actualBaselineFile = baselineSchemaFile;
268271

269272
if (!actualBaselineFile) {
@@ -294,10 +297,16 @@ async function run(): Promise<void> {
294297
if (output.trim()) {
295298
core.info("Schema changes detected:");
296299
core.info(output);
297-
await createComment(output);
300+
// Only create comment for actual PR events
301+
if (context.eventName === "pull_request" && !baselineSchemaFile) {
302+
await createComment(output);
303+
}
298304
} else {
299305
core.info("No schema changes detected");
300-
await createComment("No schema changes detected.");
306+
// Only create comment for actual PR events
307+
if (context.eventName === "pull_request" && !baselineSchemaFile) {
308+
await createComment("No schema changes detected.");
309+
}
301310
}
302311

303312
if (!baselineSchemaFile && actualBaselineFile && actualBaselineFile !== "" && fs.existsSync(actualBaselineFile)) {

0 commit comments

Comments
 (0)