from pathlib import Path WORKFLOW = Path(".gitea/workflows/ci.yml") def test_ci_uses_gitea_compatible_artifact_action(): text = WORKFLOW.read_text() assert "actions/upload-artifact@v4" not in text assert "actions/upload-artifact@v3" in text def test_ci_installs_declared_requirements_before_tests(): text = WORKFLOW.read_text() install = text.index("pip install -r requirements.txt") tests = text.index("python3 -m pytest tests/ -q") assert install < tests def test_ci_audits_pinned_runtime_dependencies_before_tests_and_release_build(): text = WORKFLOW.read_text() lint = text[text.index(" lint:") : text.index(" build-release:")] build = text[text.index(" build-release:") : text.index(" browser-journey:")] audit_install = lint.index("pip install -r requirements-audit.txt") audit = lint.index("python3 -m pip_audit -r requirements.txt --strict") tests = lint.index("python3 -m pytest tests/ -q") assert audit_install < audit < tests assert "needs: lint" in build def test_runtime_multipart_parser_uses_advisory_fixed_release(): requirements = Path("requirements.txt").read_text().splitlines() assert "python-multipart==0.0.32" in requirements def test_release_promotion_waits_for_tests_and_bundle(): text = WORKFLOW.read_text() release = text[text.index(" release-candidate:") :] assert "needs: [lint, build-release, browser-journey]" in release assert "github.event_name == 'push'" in release assert "actions/download-artifact@v3" in release assert ( 'python3 scripts/verify_release.py --input-dir dist --commit "$TARGET" --repository .' in release ) assert release.index("sha256sum -c") < release.index("curl --fail-with-body") def test_release_promotion_waits_for_artifact_mobile_offline_journey(): text = WORKFLOW.read_text() browser = text[text.index(" browser-journey:") : text.index(" release-candidate:")] release = text[text.index(" release-candidate:") :] assert "needs: build-release" in browser assert "actions/download-artifact@v3" in browser assert "pip install -r requirements-e2e.txt" in browser assert "python3 -m playwright install --with-deps chromium" in browser assert 'STACKCHAIN_RUN_RELEASE_E2E: "1"' in browser assert ( "python3 -m pytest tests/e2e/test_mobile_offline_issue_release.py " "tests/e2e/test_mobile_search_preview_navigation.py " "tests/e2e/test_mobile_find_work_release.py " "tests/e2e/test_mobile_home_bootstrap_release.py " "tests/e2e/test_mobile_today_handoff_release.py " "tests/e2e/test_mobile_today_wrap_up_release.py " "tests/e2e/test_mobile_wrap_up_handoff_release.py -q" ) in browser assert "needs: [lint, build-release, browser-journey]" in release