From ae351cb5575d0f710c7f11fef50bde95425f75bf Mon Sep 17 00:00:00 2001 From: rw-bsi Date: Wed, 24 Jun 2026 22:45:22 +0100 Subject: [PATCH 1/6] support for preview environment --- backend/apps/ifc_validation_bff/views_legacy.py | 10 +++++++--- backend/core/settings.py | 10 +++++----- backend/core/urls.py | 5 +++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/backend/apps/ifc_validation_bff/views_legacy.py b/backend/apps/ifc_validation_bff/views_legacy.py index 4f5c30f0..f5b671c9 100644 --- a/backend/apps/ifc_validation_bff/views_legacy.py +++ b/backend/apps/ifc_validation_bff/views_legacy.py @@ -26,7 +26,8 @@ from apps.ifc_validation.tasks import ifc_file_validation_task from core.settings import MEDIA_ROOT, MAX_FILES_PER_UPLOAD -from core.settings import DEVELOPMENT, LOGIN_URL, USE_WHITELIST +from core.settings import DEVELOPMENT, PREVIEW +from core.settings import LOGIN_URL, USE_WHITELIST from core.settings import FEATURE_URL, MAX_OUTCOMES_PER_RULE logger = logging.getLogger(__name__) @@ -61,7 +62,7 @@ def get_current_user(request): return user # only used for local development - elif DEVELOPMENT and not USE_WHITELIST: + elif (DEVELOPMENT or PREVIEW) and not USE_WHITELIST: username = 'development' user = UserAdditionalInfo.find_user_by_username(username) @@ -109,7 +110,10 @@ def get_feature_filename(feature_code): def get_feature_url(feature_code): """ Get the URL for the corresponding feature filename - In DEV, we return the filename in the 'development' branch of the repository and 'main' for PROD. + We return the filename in the relevant branch of the repositoy, eg. + - 'development' for DEV + - 'preview' for PREVIEW + - 'main' for MAIN """ feature_files = get_feature_filename(feature_code) diff --git a/backend/core/settings.py b/backend/core/settings.py index 453338ae..e1c6be20 100644 --- a/backend/core/settings.py +++ b/backend/core/settings.py @@ -33,13 +33,13 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = ast.literal_eval(os.environ.get("DEBUG", 'False')) DEVELOPMENT = os.environ.get('ENV', 'PROD').upper() in ('DEV', 'DEVELOP', 'DEVELOPMENT') -STAGING = os.environ.get('ENV', 'PROD').upper() in ('STAGE', 'STAGING', 'QA') +PREVIEW = os.environ.get('ENV', 'PROD').upper() in ('PREV', 'PREVIEW', 'STAGE', 'STAGING', 'QA') PRODUCTION = os.environ.get('ENV', 'PROD').upper() in ('PROD', 'PRODUCTION', 'PRD') -ENVIRONMENT = 'DEVELOPMENT' if DEVELOPMENT else 'STAGING' if STAGING else 'PRODUCTION' +ENVIRONMENT = 'DEVELOPMENT' if DEVELOPMENT else 'PREVIEW' if PREVIEW else 'PRODUCTION' PUBLIC_URL = os.getenv('PUBLIC_URL').strip('/') if os.getenv('PUBLIC_URL') is not None else None # URL for rule hyperlinks; determine the branch based on the environment -FEATURE_BRANCH = "development" if DEVELOPMENT else "main" +FEATURE_BRANCH = 'development' if DEVELOPMENT else 'preview' if PREVIEW else 'main' FEATURE_URL = os.getenv( "FEATURE_URL", f"https://buildingsmart.github.io/ifc-gherkin-rules/branches/{FEATURE_BRANCH}/features/" ) @@ -78,7 +78,7 @@ "django_cleanup.apps.CleanupConfig" # to automatically remove unlinked files ] -if DEVELOPMENT: +if DEVELOPMENT or PREVIEW: INSTALLED_APPS += [ "debug_toolbar", ] @@ -99,7 +99,7 @@ "django.middleware.clickjacking.XFrameOptionsMiddleware", ] -if DEVELOPMENT: +if DEVELOPMENT or PREVIEW: MIDDLEWARE += [ "debug_toolbar.middleware.DebugToolbarMiddleware", ] diff --git a/backend/core/urls.py b/backend/core/urls.py index 64673ffd..0d16ce9a 100644 --- a/backend/core/urls.py +++ b/backend/core/urls.py @@ -11,7 +11,8 @@ from .views_auth import login, logout, callback, whoami -from core.settings import MEDIA_ROOT, MEDIA_URL, STATIC_URL, STATIC_ROOT, DEVELOPMENT +from core.settings import MEDIA_ROOT, MEDIA_URL, STATIC_URL, STATIC_ROOT +from core.settings import DEVELOPMENT, PREVIEW def redirect_root(request): @@ -80,7 +81,7 @@ def redirect_to_v1(request, resource, suffix=None): path('callback/', callback, name='callback'), ] -if DEVELOPMENT: +if DEVELOPMENT or PREVIEW: urlpatterns += [ # redirect root to admin path("", lambda request: HttpResponseRedirect("/admin/")), From e9fd4449e05d69e3e0e9d050ccf58e2f87917dc1 Mon Sep 17 00:00:00 2001 From: rw-bsi Date: Tue, 9 Jun 2026 16:23:16 +0100 Subject: [PATCH 2/6] update container image --- .github/workflows/playwright.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 0e62ac5c..f7814d5f 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -16,7 +16,7 @@ jobs: name: 'Playwright Tests' runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright:v1.55.0-noble + image: mcr.microsoft.com/playwright:v1.60.0-noble env: DJANGO_DB: postgresql POSTGRES_DB: postgres From ef01a9fe095273c10b0b84e7e4ce75861f1f12d5 Mon Sep 17 00:00:00 2001 From: rw-bsi Date: Tue, 9 Jun 2026 16:25:51 +0100 Subject: [PATCH 3/6] trigger GH actions --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 73c5bb5e..7c612634 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 buildingSMART International Ltd. +Copyright (c) 2026 buildingSMART International Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From ae6590f43ce91490b3cdb3100774e2d28c54702c Mon Sep 17 00:00:00 2001 From: rw-bsi Date: Tue, 9 Jun 2026 16:37:02 +0100 Subject: [PATCH 4/6] try removing install Playwright browsers --- .github/workflows/playwright.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index f7814d5f..11e3d481 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -136,17 +136,19 @@ jobs: run: npm install working-directory: ./e2e - - name: Cache Playwright browsers - uses: actions/cache@v4 - with: - path: ~/.cache/ms-playwright - key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-playwright- + # image already have browsers + # - name: Cache Playwright browsers + # uses: actions/cache@v4 + # with: + # path: ~/.cache/ms-playwright + # key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-playwright- - - name: Install Playwright browsers - run: npm run install-playwright - working-directory: ./e2e + # image already have browsers + # - name: Install Playwright browsers + # run: npm run install-playwright + # working-directory: ./e2e - name: Setup Django database, migrations, and superusers run: | From c97095c7a2689c2e9b406ad31929481784e91b05 Mon Sep 17 00:00:00 2001 From: rw-bsi Date: Tue, 9 Jun 2026 16:43:34 +0100 Subject: [PATCH 5/6] update Playwright packages --- e2e/package-lock.json | 22 +++++++++++----------- e2e/package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 61b08f5c..72370549 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -16,13 +16,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.1.tgz", - "integrity": "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", + "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.54.1" + "playwright": "1.60.0" }, "bin": { "playwright": "cli.js" @@ -47,13 +47,13 @@ } }, "node_modules/playwright": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.1.tgz", - "integrity": "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.54.1" + "playwright-core": "1.60.0" }, "bin": { "playwright": "cli.js" @@ -66,9 +66,9 @@ } }, "node_modules/playwright-core": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.1.tgz", - "integrity": "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/e2e/package.json b/e2e/package.json index 88b246a6..194c9f84 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -14,7 +14,7 @@ "author": "buildingSMART.org", "license": "MIT", "devDependencies": { - "@playwright/test": "^1.54.1" + "@playwright/test": "^1.60.0" }, "engines": { "node": ">=16.0.0" From 7b8b0f9059275eb55f27a6dacb8cc48360bdc086 Mon Sep 17 00:00:00 2001 From: rw-bsi Date: Tue, 9 Jun 2026 16:51:45 +0100 Subject: [PATCH 6/6] remove obsolete comments --- .github/workflows/playwright.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 11e3d481..193b42e6 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -136,20 +136,6 @@ jobs: run: npm install working-directory: ./e2e - # image already have browsers - # - name: Cache Playwright browsers - # uses: actions/cache@v4 - # with: - # path: ~/.cache/ms-playwright - # key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-playwright- - - # image already have browsers - # - name: Install Playwright browsers - # run: npm run install-playwright - # working-directory: ./e2e - - name: Setup Django database, migrations, and superusers run: | cd backend