diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4ca08d935..350fe0b5c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -122,6 +122,27 @@ Notes: - **PR labels**: Add labels with the same names (e.g., `skip:ci`, `skip:test:long-running`) to your pull request - Both methods work independently - you can use either or both + +### Run Github Actions + +One can trigger GitHub Actions workflows locally using commands like so: + +```shell +BRANCH=$(git rev-parse --abbrev-ref HEAD) + +# Hourly (quick smoke) and Daily (thorough) against staging +gh workflow run scheduled-testing-staging-hourly.yml --ref "$BRANCH" -f branch="$BRANCH" +gh workflow run scheduled-testing-staging-daily.yml --ref "$BRANCH" -f branch="$BRANCH" + +# Same against production +gh workflow run scheduled-testing-production-hourly.yml --ref "$BRANCH" -f branch="$BRANCH" +gh workflow run scheduled-testing-production-daily.yml --ref "$BRANCH" -f branch="$BRANCH" +``` + +This is especially useful for testing that new he-tme versions will pass the scheduled testing workflows before merging into main. + + + ### Publish Release Releases follow a four-phase workflow that allows Ketryx compliance approvals to be collected before publishing: diff --git a/tests/constants_test.py b/tests/constants_test.py index 3fc1c2d35..5df88ab74 100644 --- a/tests/constants_test.py +++ b/tests/constants_test.py @@ -74,45 +74,45 @@ # nearly-identical blocks as duplicated code (the 3% duplication threshold). SPOT_0_EXPECTED_RESULT_FILES = [ ("tissue_qc_csv_class_information.csv", 285, 10), - ("tissue_qc_geojson_polygons.json", 101150, 10), - ("tissue_qc_parquet_polygons.parquet", 39435, 10), - ("tissue_qc_segmentation_map_image.tiff", 1645652, 10), + ("tissue_qc_geojson_polygons.json", 100956, 10), + ("tissue_qc_parquet_polygons.parquet", 39384, 10), + ("tissue_qc_segmentation_map_image.tiff", 1645632, 10), ("tissue_segmentation_csv_class_information.csv", 452, 10), - ("tissue_segmentation_geojson_polygons.json", 327625, 10), - ("tissue_segmentation_parquet_polygons.parquet", 117509, 10), - ("tissue_segmentation_segmentation_map_image.tiff", 2858496, 10), - ("cell_classification_geojson_polygons.json", 6117357, 10), - ("cell_classification_parquet_polygons.parquet", 1985592, 10), - ("readout_generation_cell_readouts.csv", 1660865, 10), - ("readout_generation_slide_readouts.csv", 303585, 10), + ("tissue_segmentation_geojson_polygons.json", 396960, 10), + ("tissue_segmentation_parquet_polygons.parquet", 145744, 10), + ("tissue_segmentation_segmentation_map_image.tiff", 3078034, 10), + ("cell_classification_geojson_polygons.json", 6385805, 10), + ("cell_classification_parquet_polygons.parquet", 1998420, 10), + ("readout_generation_cell_readouts.csv", 1654453, 10), + ("readout_generation_slide_readouts.csv", 303708, 10), ] SPOT_0_EXPECTED_CELLS_CLASSIFIED = (39798, 10) SPOT_1_EXPECTED_RESULT_FILES = [ ("tissue_qc_csv_class_information.csv", 290, 10), ("tissue_qc_geojson_polygons.json", 75281, 10), - ("tissue_qc_parquet_polygons.parquet", 29087, 10), + ("tissue_qc_parquet_polygons.parquet", 29075, 10), ("tissue_qc_segmentation_map_image.tiff", 1288632, 10), - ("tissue_segmentation_csv_class_information.csv", 446, 10), - ("tissue_segmentation_geojson_polygons.json", 152301, 10), - ("tissue_segmentation_parquet_polygons.parquet", 56563, 10), - ("tissue_segmentation_segmentation_map_image.tiff", 1783376, 10), - ("cell_classification_geojson_polygons.json", 1726813, 10), - ("cell_classification_parquet_polygons.parquet", 562536, 10), - ("readout_generation_cell_readouts.csv", 464838, 10), - ("readout_generation_slide_readouts.csv", 299361, 10), + ("tissue_segmentation_csv_class_information.csv", 444, 10), + ("tissue_segmentation_geojson_polygons.json", 163318, 10), + ("tissue_segmentation_parquet_polygons.parquet", 60980, 10), + ("tissue_segmentation_segmentation_map_image.tiff", 1806464, 10), + ("cell_classification_geojson_polygons.json", 1727805, 10), + ("cell_classification_parquet_polygons.parquet", 562586, 10), + ("readout_generation_cell_readouts.csv", 465593, 10), + ("readout_generation_slide_readouts.csv", 299708, 10), ] match os.getenv("AIGNOSTICS_PLATFORM_ENVIRONMENT", "production"): case "production": TEST_APPLICATION_ID = "test-app" - TEST_APPLICATION_VERSION = "1.0.0" + TEST_APPLICATION_VERSION = "1.3.0" HETA_APPLICATION_ID = "he-tme" - HETA_APPLICATION_VERSION = "1.2.0" - TEST_APPLICATION_VERSION_USE_LATEST_FALLBACK_SKIP = False + HETA_APPLICATION_VERSION = "1.3.0" + TEST_APPLICATION_VERSION_USE_LATEST_FALLBACK_SKIP = True - PIPELINE_GPU_TYPE = "L4" + PIPELINE_GPU_TYPE = "A100" PIPELINE_GPU_PROVISIONING_MODE = "SPOT" PIPELINE_GPU_FLEX_START_MAX_RUN_DURATION_MINUTES = None PIPELINE_MAX_GPUS_PER_SLIDE = 1 @@ -121,13 +121,13 @@ case "staging": TEST_APPLICATION_ID = "test-app" - TEST_APPLICATION_VERSION = "1.0.0" + TEST_APPLICATION_VERSION = "1.3.0" HETA_APPLICATION_ID = "he-tme" - HETA_APPLICATION_VERSION = "1.3.0-rc.1" + HETA_APPLICATION_VERSION = "1.3.0" TEST_APPLICATION_VERSION_USE_LATEST_FALLBACK_SKIP = True - PIPELINE_GPU_TYPE = "L4" + PIPELINE_GPU_TYPE = "A100" PIPELINE_GPU_PROVISIONING_MODE = "SPOT" PIPELINE_GPU_FLEX_START_MAX_RUN_DURATION_MINUTES = None PIPELINE_MAX_GPUS_PER_SLIDE = 1