Skip to content

Commit

Permalink
FIX: Invert default schema URLs
Browse files Browse the repository at this point in the history
  • Loading branch information
mferrera committed Jan 14, 2025
1 parent 3edc1dc commit 1751d3e
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 15 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/ci-fmudataio.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,12 @@ jobs:
"fmu-sumo-uploader @ git+https://github.com/equinor/fmu-sumo-uploader.git"

- name: Full test
run: pytest -v --cov --cov-report term-missing
run: |
if [[ "${{ github.event.pull_request.base.ref }}" == "staging" ]]; then
pytest -n auto -v --cov --cov-report term-missing --prod
else
pytest -n auto -v --cov --cov-report term-missing
fi
docker_build:
name: Build Docker image
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/schemas-up-to-date.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ jobs:

- name: Check schema
run: |
./tools/update-schema --diff
if [[ "${{ github.event.pull_request.base.ref }}" == "staging" ]]; then
./tools/update-schema --diff --prod
else
./tools/update-schema --diff
fi
- name: Ensure schema validates with AJV
run: |
Expand Down
6 changes: 3 additions & 3 deletions src/fmu/dataio/_models/_schema_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,9 @@ def url(cls) -> str:
DEV_URL = f"{FmuSchemas.DEV_URL}/{cls.PATH}"
PROD_URL = f"{FmuSchemas.PROD_URL}/{cls.PATH}"

if os.environ.get("SCHEMA_RELEASE", False):
return PROD_URL
return DEV_URL
if os.environ.get("DEV_SCHEMA", False):
return DEV_URL
return PROD_URL

@classmethod
def default_generator(cls) -> type[GenerateJsonSchema]:
Expand Down
14 changes: 14 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,20 @@
ERT_RUNPATH = f"_ERT_{FmuEnv.RUNPATH.name}"


def pytest_addoption(parser):
parser.addoption(
"--prod", action="store_true", help="Use schemas/metadata with production URLs."
)


def pytest_configure(config) -> None:
# Set environment variables based on conditions
if config.getoption("--prod"):
os.environ["DEV_SCHEMA"] = ""
else:
os.environ["DEV_SCHEMA"] = "1"


def _current_function_name():
"""Helper to retrieve current function name, e.g. for logging"""
return inspect.currentframe().f_back.f_code.co_name
Expand Down
14 changes: 10 additions & 4 deletions tests/test_schema/test_schemas_up_to_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,12 @@ def test_schemas_uptodate(schema: SchemaBase) -> None:
the local schema with the output of `dump()`.
To get more feedback or generate new schemas run:
`./tools/update_schema`
./tools/update_schema --diff
If you are generating a production release try running:
./tools/update_schema --diff --prod
"""
with open(schema.PATH) as f:
assert json.load(f) == schema.dump()
Expand All @@ -45,11 +50,12 @@ def test_schemas_uptodate(schema: SchemaBase) -> None:
def test_schema_url_changes_with_env_var(
schema: SchemaBase, monkeypatch: MonkeyPatch
) -> None:
assert schema.url().startswith(FmuSchemas.DEV_URL)
assert schema.dump()["$id"].startswith(FmuSchemas.DEV_URL)
monkeypatch.setenv("SCHEMA_RELEASE", "1")
monkeypatch.setenv("DEV_SCHEMA", "")
assert schema.url().startswith(FmuSchemas.PROD_URL)
assert schema.dump()["$id"].startswith(FmuSchemas.PROD_URL)
monkeypatch.setenv("DEV_SCHEMA", "1")
assert schema.url().startswith(FmuSchemas.DEV_URL)
assert schema.dump()["$id"].startswith(FmuSchemas.DEV_URL)


@pytest.mark.parametrize("schema", schemas)
Expand Down
20 changes: 14 additions & 6 deletions tools/update-schema
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ import subprocess
import sys
from copy import deepcopy
from pathlib import Path
from typing import Any, Dict, List, TypeVar
from typing import TYPE_CHECKING, Any, Dict, List, TypeVar

from fmu.dataio._models import schemas
from fmu.dataio._models._schema_base import SchemaBase
if TYPE_CHECKING:
from fmu.dataio._models._schema_base import SchemaBase

GREEN = "\033[32m"
RED = "\033[31m"
Expand All @@ -47,6 +47,12 @@ def _get_parser() -> argparse.ArgumentParser:
action="store_true",
help="Show a diff between the current schema and the new one in output.",
)
parser.add_argument(
"-p",
"--prod",
action="store_true",
help="Produce schemas with production URLs",
)
parser.add_argument(
"-t",
"--test",
Expand Down Expand Up @@ -219,11 +225,13 @@ def main() -> None:
if args.force:
print(INFO, "forcing overwrite of all schemas")

is_release = bool(os.environ.get("SCHEMA_RELEASE", False))
os.environ["DEV_SCHEMA"] = "1" if args.prod else "0"
# Ensures URLs will differ based on above
import fmu.dataio._models as models

failed_a_write = False
for schema in schemas:
did_write = write_schema(schema, args.force, is_release, args.test, args.diff)
for schema in models.schemas:
did_write = write_schema(schema, args.force, args.prod, args.test, args.diff)
if not did_write:
failed_a_write = True

Expand Down

0 comments on commit 1751d3e

Please sign in to comment.