local ifctester wheel build

This commit is contained in:
Sayan Jyoti Das
2026-03-18 10:29:09 +05:30
parent 845a13ba83
commit 47f058341b
5 changed files with 57 additions and 13 deletions
+1
View File
@@ -28,6 +28,7 @@ dist:
mkdir -p dist mkdir -p dist
cp -r $(PACKAGE_NAME) build/ cp -r $(PACKAGE_NAME) build/
cp pyproject.toml build/ cp pyproject.toml build/
if [ -f README.md ]; then cp README.md build/; fi
ifeq ($(IS_STABLE), TRUE) ifeq ($(IS_STABLE), TRUE)
$(SED) 's/version = "0.0.0"/version = "$(VERSION)"/' build/pyproject.toml $(SED) 's/version = "0.0.0"/version = "$(VERSION)"/' build/pyproject.toml
ifdef IS_MODULE ifdef IS_MODULE
+46 -10
View File
@@ -25,9 +25,15 @@ WEBAPP_BUILD_DIR := $(WEBAPP_DIR)/dist
PYODIDE_DIR := $(WEBAPP_DIR)/public/pyodide PYODIDE_DIR := $(WEBAPP_DIR)/public/pyodide
PYODIDE_VERSION := 0.28.0 PYODIDE_VERSION := 0.28.0
PYODIDE_URL := https://github.com/pyodide/pyodide/releases/download/$(PYODIDE_VERSION)/pyodide-$(PYODIDE_VERSION).tar.bz2 PYODIDE_URL := https://github.com/pyodide/pyodide/releases/download/$(PYODIDE_VERSION)/pyodide-$(PYODIDE_VERSION).tar.bz2
WEBAPP_GENERATED_DIR := $(WEBAPP_DIR)/public/worker/generated
WEBAPP_IFCTESTER_MANIFEST := $(WEBAPP_GENERATED_DIR)/ifctester.json
WEBAPP_IFCTESTER_BUILD_DIR := build-webapp-wheel
PACKAGE_WEBAPP_DIR := $(PACKAGE_NAME)/webapp
PACKAGE_WEBAPP_WWW_DIR := $(PACKAGE_WEBAPP_DIR)/www
.PHONY: webapp-dev .PHONY: webapp-dev
webapp-dev: webapp-dev: pyodide-download webapp-stage-ifctester-wheel
cd $(WEBAPP_DIR) && npm install
cd $(WEBAPP_DIR) && npm run dev cd $(WEBAPP_DIR) && npm run dev
.PHONY: pyodide-download .PHONY: pyodide-download
@@ -62,8 +68,31 @@ pyodide-download:
echo "Pyodide $(PYODIDE_VERSION) prepared in $(PYODIDE_DIR)"; \ echo "Pyodide $(PYODIDE_VERSION) prepared in $(PYODIDE_DIR)"; \
fi fi
.PHONY: webapp-stage-ifctester-wheel
webapp-stage-ifctester-wheel:
rm -rf $(WEBAPP_GENERATED_DIR)
rm -rf $(WEBAPP_IFCTESTER_BUILD_DIR)
mkdir -p $(WEBAPP_IFCTESTER_BUILD_DIR)
cp -r $(PACKAGE_NAME) $(WEBAPP_IFCTESTER_BUILD_DIR)/
rm -rf $(WEBAPP_IFCTESTER_BUILD_DIR)/$(PACKAGE_NAME)/webapp
cp pyproject.toml $(WEBAPP_IFCTESTER_BUILD_DIR)/
cp README.md $(WEBAPP_IFCTESTER_BUILD_DIR)/
ifeq ($(IS_STABLE), TRUE)
$(SED) 's/version = "0.0.0"/version = "$(VERSION)"/' $(WEBAPP_IFCTESTER_BUILD_DIR)/pyproject.toml
$(SED) 's/version = "0.0.0"/version = "$(VERSION)"/' $(WEBAPP_IFCTESTER_BUILD_DIR)/$(PACKAGE_NAME)/__init__.py
else
$(SED) 's/version = "0.0.0"/version = "$(VERSION)a$(VERSION_DATE)"/' $(WEBAPP_IFCTESTER_BUILD_DIR)/pyproject.toml
$(SED) 's/version = "0.0.0"/version = "$(VERSION)-alpha$(VERSION_DATE)"/' $(WEBAPP_IFCTESTER_BUILD_DIR)/$(PACKAGE_NAME)/__init__.py
endif
cd $(WEBAPP_IFCTESTER_BUILD_DIR) && $(PYTHON) -m venv env --system-site-packages && . env/$(VENV_ACTIVATE) && python -m pip install build && python -m build --wheel --no-isolation
mkdir -p $(WEBAPP_GENERATED_DIR)
wheel=$$(basename $(WEBAPP_IFCTESTER_BUILD_DIR)/dist/$(PACKAGE_NAME)-*.whl); \
cp "$(WEBAPP_IFCTESTER_BUILD_DIR)/dist/$$wheel" "$(WEBAPP_GENERATED_DIR)/$$wheel"; \
printf '{\n "wheel_url": "/worker/generated/%s"\n}\n' "$$wheel" > "$(WEBAPP_IFCTESTER_MANIFEST)"
rm -rf $(WEBAPP_IFCTESTER_BUILD_DIR)
.PHONY: webapp-build .PHONY: webapp-build
webapp-build: pyodide-download webapp-build: pyodide-download webapp-stage-ifctester-wheel
cd $(WEBAPP_DIR) && npm install cd $(WEBAPP_DIR) && npm install
cd $(WEBAPP_DIR) && npm run build cd $(WEBAPP_DIR) && npm run build
@@ -76,22 +105,29 @@ clean:
rm -rf $(WEBAPP_BUILD_DIR) rm -rf $(WEBAPP_BUILD_DIR)
rm -rf $(WEBAPP_DIR)/node_modules rm -rf $(WEBAPP_DIR)/node_modules
rm -rf $(PYODIDE_DIR) rm -rf $(PYODIDE_DIR)
rm -rf $(WEBAPP_GENERATED_DIR)
rm -rf $(WEBAPP_IFCTESTER_BUILD_DIR)
rm -rf $(PACKAGE_NAME)/webapp rm -rf $(PACKAGE_NAME)/webapp
rm -rf dist rm -rf dist
.PHONY: dist .PHONY: python-dist
dist: webapp-prepare python-dist:
rm -rf dist
# For some reason OS is not initalized when we call common.mk dist, which matters on Windows. # For some reason OS is not initalized when we call common.mk dist, which matters on Windows.
# So we pass it explicitly. # So we pass it explicitly.
$(MAKE) -f ../common.mk dist PACKAGE_NAME=$(PACKAGE_NAME) OS=$(OS) $(MAKE) -f ../common.mk dist PACKAGE_NAME=$(PACKAGE_NAME) OS=$(OS) IS_STABLE=$(IS_STABLE)
.PHONY: dist
dist: webapp-prepare
$(MAKE) python-dist OS=$(OS) IS_STABLE=$(IS_STABLE)
.PHONY: webapp-prepare .PHONY: webapp-prepare
webapp-prepare: webapp-build webapp-prepare: webapp-build
rm -rf $(PACKAGE_NAME)/webapp/www/* rm -rf $(PACKAGE_WEBAPP_WWW_DIR)
mkdir -p $(PACKAGE_NAME)/webapp/www mkdir -p $(PACKAGE_WEBAPP_WWW_DIR)
cp -r $(WEBAPP_BUILD_DIR)/* $(PACKAGE_NAME)/webapp/www/ cp -r $(WEBAPP_BUILD_DIR)/* $(PACKAGE_WEBAPP_WWW_DIR)/
cp $(WEBAPP_DIR)/__init__.py $(PACKAGE_NAME)/webapp/__init__.py cp $(WEBAPP_DIR)/__init__.py $(PACKAGE_WEBAPP_DIR)/__init__.py
cp $(WEBAPP_DIR)/serve.py $(PACKAGE_NAME)/webapp/serve.py cp $(WEBAPP_DIR)/serve.py $(PACKAGE_WEBAPP_DIR)/serve.py
.PHONY: test .PHONY: test
test: test:
+1
View File
@@ -11,6 +11,7 @@ node_modules
dist dist
dist-ssr dist-ssr
*.local *.local
public/worker/generated
# Editor directories and files # Editor directories and files
.vscode/* .vscode/*
@@ -1,5 +1,5 @@
import config from '../../../config.json';
import hyperid from 'hyperid'; import hyperid from 'hyperid';
import config from '../../../config.json';
import type { AuditReportData } from "$src/types/report"; import type { AuditReportData } from "$src/types/report";
let pyodide: any = null; let pyodide: any = null;
@@ -83,7 +83,13 @@ async function initEnvironment() {
await pyodide.loadPackage("shapely"); await pyodide.loadPackage("shapely");
// Install IfcTester // Install IfcTester
await micropip.install('ifctester'); const ifctesterManifest = await fetch('/worker/generated/ifctester.json').then((response) => {
if (!response.ok) {
throw new Error(`[worker] Failed to load IfcTester wheel manifest: ${response.status} ${response.statusText}`);
}
return response.json() as Promise<{ wheel_url: string }>;
});
await micropip.install(ifctesterManifest.wheel_url);
// Initialize IDS and API // Initialize IDS and API
await API.init(pyodide); await API.init(pyodide);