forked from baron/baron-sso
코드 체크 개선
This commit is contained in:
@@ -334,8 +334,7 @@ jobs:
|
|||||||
- name: Get Playwright version
|
- name: Get Playwright version
|
||||||
id: playwright-version
|
id: playwright-version
|
||||||
run: |
|
run: |
|
||||||
cd userfront-e2e
|
node scripts/playwrightPackageVersion.cjs userfront-e2e >> "$GITHUB_OUTPUT"
|
||||||
echo "version=$(npm list @playwright/test | grep @playwright/test | awk -F@ '{print $NF}' | head -n 1)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Cache Playwright Browsers
|
- name: Cache Playwright Browsers
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -563,8 +562,7 @@ jobs:
|
|||||||
- name: Get Playwright version
|
- name: Get Playwright version
|
||||||
id: playwright-version
|
id: playwright-version
|
||||||
run: |
|
run: |
|
||||||
cd adminfront
|
node scripts/playwrightPackageVersion.cjs adminfront >> "$GITHUB_OUTPUT"
|
||||||
echo "version=$(pnpm list -C ../common @playwright/test --depth 0 | grep @playwright/test | awk -F@ '{print $NF}' | head -n 1)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Cache Playwright Browsers
|
- name: Cache Playwright Browsers
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -657,7 +655,7 @@ jobs:
|
|||||||
id: playwright-version
|
id: playwright-version
|
||||||
working-directory: devfront
|
working-directory: devfront
|
||||||
run: |
|
run: |
|
||||||
echo "version=$(pnpm list -C ../common @playwright/test --depth 0 | grep @playwright/test | awk -F@ '{print $NF}' | head -n 1)" >> "$GITHUB_OUTPUT"
|
node ../scripts/playwrightPackageVersion.cjs . >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Cache Playwright Browsers
|
- name: Cache Playwright Browsers
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -834,8 +832,7 @@ jobs:
|
|||||||
- name: Get Playwright version
|
- name: Get Playwright version
|
||||||
id: playwright-version
|
id: playwright-version
|
||||||
run: |
|
run: |
|
||||||
cd orgfront
|
node scripts/playwrightPackageVersion.cjs orgfront >> "$GITHUB_OUTPUT"
|
||||||
echo "version=$(pnpm list -C ../common @playwright/test --depth 0 | grep @playwright/test | awk -F@ '{print $NF}' | head -n 1)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Cache Playwright Browsers
|
- name: Cache Playwright Browsers
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
|
|||||||
@@ -517,8 +517,7 @@ function UserListPage() {
|
|||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
onSelect={(e) => {
|
onSelect={() => {
|
||||||
e.preventDefault();
|
|
||||||
setBulkUploadOpen(true);
|
setBulkUploadOpen(true);
|
||||||
}}
|
}}
|
||||||
className="cursor-pointer"
|
className="cursor-pointer"
|
||||||
|
|||||||
@@ -1279,6 +1279,7 @@ type = "TYPE"
|
|||||||
updated = "UPDATED"
|
updated = "UPDATED"
|
||||||
|
|
||||||
[ui.admin.users]
|
[ui.admin.users]
|
||||||
|
csv_template = "Download Template"
|
||||||
|
|
||||||
[ui.admin.users.bulk]
|
[ui.admin.users.bulk]
|
||||||
create_missing_tenant = "Create new"
|
create_missing_tenant = "Create new"
|
||||||
|
|||||||
@@ -1282,6 +1282,7 @@ type = "유형"
|
|||||||
updated = "UPDATED"
|
updated = "UPDATED"
|
||||||
|
|
||||||
[ui.admin.users]
|
[ui.admin.users]
|
||||||
|
csv_template = "템플릿 다운로드"
|
||||||
|
|
||||||
[ui.admin.users.bulk]
|
[ui.admin.users.bulk]
|
||||||
create_missing_tenant = "신규 생성"
|
create_missing_tenant = "신규 생성"
|
||||||
|
|||||||
@@ -1294,6 +1294,7 @@ type = ""
|
|||||||
updated = ""
|
updated = ""
|
||||||
|
|
||||||
[ui.admin.users]
|
[ui.admin.users]
|
||||||
|
csv_template = ""
|
||||||
|
|
||||||
[ui.admin.users.bulk]
|
[ui.admin.users.bulk]
|
||||||
create_missing_tenant = ""
|
create_missing_tenant = ""
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ test.describe("Authentication", () => {
|
|||||||
await page.goto("/");
|
await page.goto("/");
|
||||||
await expect(page.getByRole("link", { name: "조직도" })).toHaveAttribute(
|
await expect(page.getByRole("link", { name: "조직도" })).toHaveAttribute(
|
||||||
"href",
|
"href",
|
||||||
"http://localhost:5175/login?auto=1&returnTo=%2Fchart",
|
"http://localhost:5175/login?auto=1&returnTo=%2Fchart%3FincludeInternal%3Dtrue",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -423,7 +423,10 @@ test.describe("User Management", () => {
|
|||||||
|
|
||||||
const [download] = await Promise.all([
|
const [download] = await Promise.all([
|
||||||
page.waitForEvent("download"),
|
page.waitForEvent("download"),
|
||||||
page.getByTestId("user-export-without-ids-btn").click(),
|
(async () => {
|
||||||
|
await page.getByTestId("user-data-mgmt-btn").click();
|
||||||
|
await page.getByTestId("user-export-menu-item").click();
|
||||||
|
})(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(download.suggestedFilename()).toBe("users.csv");
|
expect(download.suggestedFilename()).toBe("users.csv");
|
||||||
|
|||||||
@@ -66,8 +66,10 @@ test.describe("Users Bulk Upload", () => {
|
|||||||
{ timeout: 20000 },
|
{ timeout: 20000 },
|
||||||
);
|
);
|
||||||
|
|
||||||
const bulkBtn = page.getByTestId("bulk-import-btn");
|
await page.getByTestId("user-data-mgmt-btn").click();
|
||||||
await bulkBtn.click();
|
await page
|
||||||
|
.getByRole("menuitem", { name: /일괄 임포트|일괄 등록|Bulk Import/i })
|
||||||
|
.click();
|
||||||
|
|
||||||
await expect(page.getByTestId("bulk-upload-title")).toBeVisible({
|
await expect(page.getByTestId("bulk-upload-title")).toBeVisible({
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
@@ -106,8 +108,10 @@ test.describe("Users Bulk Upload", () => {
|
|||||||
{ timeout: 20000 },
|
{ timeout: 20000 },
|
||||||
);
|
);
|
||||||
|
|
||||||
const bulkBtn = page.getByTestId("bulk-import-btn");
|
await page.getByTestId("user-data-mgmt-btn").click();
|
||||||
await bulkBtn.click();
|
await page
|
||||||
|
.getByRole("menuitem", { name: /일괄 임포트|일괄 등록|Bulk Import/i })
|
||||||
|
.click();
|
||||||
|
|
||||||
const uploadBtn = page.getByTestId("bulk-start-btn");
|
const uploadBtn = page.getByTestId("bulk-start-btn");
|
||||||
await expect(uploadBtn).toBeDisabled();
|
await expect(uploadBtn).toBeDisabled();
|
||||||
@@ -168,7 +172,10 @@ test.describe("Users Bulk Upload", () => {
|
|||||||
{ timeout: 20000 },
|
{ timeout: 20000 },
|
||||||
);
|
);
|
||||||
|
|
||||||
await page.getByTestId("bulk-import-btn").click();
|
await page.getByTestId("user-data-mgmt-btn").click();
|
||||||
|
await page
|
||||||
|
.getByRole("menuitem", { name: /일괄 임포트|일괄 등록|Bulk Import/i })
|
||||||
|
.click();
|
||||||
await page.locator('input[type="file"]').setInputFiles({
|
await page.locator('input[type="file"]').setInputFiles({
|
||||||
name: "users.csv",
|
name: "users.csv",
|
||||||
mimeType: "text/csv",
|
mimeType: "text/csv",
|
||||||
@@ -274,7 +281,10 @@ test.describe("Users Bulk Upload", () => {
|
|||||||
{ timeout: 20000 },
|
{ timeout: 20000 },
|
||||||
);
|
);
|
||||||
|
|
||||||
await page.getByTestId("bulk-import-btn").click();
|
await page.getByTestId("user-data-mgmt-btn").click();
|
||||||
|
await page
|
||||||
|
.getByRole("menuitem", { name: /일괄 임포트|일괄 등록|Bulk Import/i })
|
||||||
|
.click();
|
||||||
await page.locator('input[type="file"]').setInputFiles({
|
await page.locator('input[type="file"]').setInputFiles({
|
||||||
name: "users.csv",
|
name: "users.csv",
|
||||||
mimeType: "text/csv",
|
mimeType: "text/csv",
|
||||||
|
|||||||
@@ -1428,6 +1428,7 @@ updated = "UPDATED"
|
|||||||
created = "CREATED"
|
created = "CREATED"
|
||||||
|
|
||||||
[ui.admin.users]
|
[ui.admin.users]
|
||||||
|
csv_template = "Download Template"
|
||||||
|
|
||||||
[ui.admin.users.bulk]
|
[ui.admin.users.bulk]
|
||||||
acknowledge_warning = "I acknowledge the warning and will proceed."
|
acknowledge_warning = "I acknowledge the warning and will proceed."
|
||||||
|
|||||||
@@ -1892,6 +1892,7 @@ created = "CREATED"
|
|||||||
created = "CREATED"
|
created = "CREATED"
|
||||||
|
|
||||||
[ui.admin.users]
|
[ui.admin.users]
|
||||||
|
csv_template = "템플릿 다운로드"
|
||||||
|
|
||||||
[ui.admin.users.bulk]
|
[ui.admin.users.bulk]
|
||||||
acknowledge_warning = "경고를 확인했으며 계속 진행합니다."
|
acknowledge_warning = "경고를 확인했으며 계속 진행합니다."
|
||||||
|
|||||||
@@ -1771,6 +1771,7 @@ updated = ""
|
|||||||
created = ""
|
created = ""
|
||||||
|
|
||||||
[ui.admin.users]
|
[ui.admin.users]
|
||||||
|
csv_template = ""
|
||||||
|
|
||||||
[ui.admin.users.bulk]
|
[ui.admin.users.bulk]
|
||||||
acknowledge_warning = ""
|
acknowledge_warning = ""
|
||||||
|
|||||||
24
scripts/playwrightPackageVersion.cjs
Normal file
24
scripts/playwrightPackageVersion.cjs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const fs = require("node:fs");
|
||||||
|
const path = require("node:path");
|
||||||
|
|
||||||
|
const packageDir = process.argv[2];
|
||||||
|
|
||||||
|
if (!packageDir) {
|
||||||
|
console.error("Usage: node scripts/playwrightPackageVersion.cjs <package-dir>");
|
||||||
|
process.exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
const packageJsonPath = path.resolve(process.cwd(), packageDir, "package.json");
|
||||||
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
||||||
|
const version =
|
||||||
|
packageJson.devDependencies?.["@playwright/test"] ??
|
||||||
|
packageJson.dependencies?.["@playwright/test"];
|
||||||
|
|
||||||
|
if (!version) {
|
||||||
|
console.error(`@playwright/test version not found in ${packageJsonPath}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`version=${version.replace(/^[^0-9]*/, "")}`);
|
||||||
23
test/code_check_playwright_cache_policy_test.sh
Normal file
23
test/code_check_playwright_cache_policy_test.sh
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
WORKFLOW_FILE="$ROOT_DIR/.gitea/workflows/code_check.yml"
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo "ERROR: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
grep -Fq -- "scripts/playwrightPackageVersion.cjs" "$WORKFLOW_FILE" || \
|
||||||
|
fail "Code Check workflow must compute Playwright cache versions through the shared package.json reader"
|
||||||
|
|
||||||
|
if grep -Fq -- "npm list @playwright/test" "$WORKFLOW_FILE"; then
|
||||||
|
fail "Code Check workflow must not call npm list before npm ci"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -Fq -- "pnpm list -C ../common @playwright/test" "$WORKFLOW_FILE"; then
|
||||||
|
fail "Code Check workflow must not call pnpm list before pnpm install"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "OK: Code Check Playwright cache keys do not depend on preinstalled node_modules"
|
||||||
25
test/playwright_package_version_test.sh
Normal file
25
test/playwright_package_version_test.sh
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo "ERROR: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_version() {
|
||||||
|
local package_dir="$1"
|
||||||
|
local expected="$2"
|
||||||
|
local actual
|
||||||
|
actual="$(node "$ROOT_DIR/scripts/playwrightPackageVersion.cjs" "$package_dir")"
|
||||||
|
[ "$actual" = "version=$expected" ] || \
|
||||||
|
fail "$package_dir Playwright version must be $expected, got: $actual"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_version userfront-e2e 1.58.2
|
||||||
|
assert_version adminfront 1.60.0
|
||||||
|
assert_version devfront 1.60.0
|
||||||
|
assert_version orgfront 1.60.0
|
||||||
|
|
||||||
|
echo "OK: Playwright package versions are read from package.json"
|
||||||
Reference in New Issue
Block a user