diff --git a/eng/ci/library-release.yml b/eng/ci/library-release.yml index 9d7e1a2..202a7bd 100644 --- a/eng/ci/library-release.yml +++ b/eng/ci/library-release.yml @@ -32,6 +32,11 @@ extends: name: 1es-pool-azfunc image: 1es-windows-2022 os: windows + sdl: + componentgovernance: + alertWarningLevel: Medium + failOnAlert: true + verbosity: Normal stages: - stage: ReleaseV1_BumpVersion diff --git a/eng/ci/official-build.yml b/eng/ci/official-build.yml index d4f4e9a..b8077fa 100644 --- a/eng/ci/official-build.yml +++ b/eng/ci/official-build.yml @@ -38,6 +38,11 @@ extends: name: 1es-pool-azfunc image: 1es-windows-2022 os: windows + sdl: + componentgovernance: + alertWarningLevel: Medium + failOnAlert: true + verbosity: Normal stages: - stage: Build diff --git a/eng/ci/public-build.yml b/eng/ci/public-build.yml index 074d0eb..1a51cf6 100644 --- a/eng/ci/public-build.yml +++ b/eng/ci/public-build.yml @@ -36,6 +36,10 @@ extends: compiled: enabled: true # still only runs for default branch runSourceLanguagesInSourceAnalysis: true + componentgovernance: + alertWarningLevel: Medium + failOnAlert: true + verbosity: Normal settings: skipBuildTagsForGitHubPullRequests: ${{ variables['System.PullRequest.IsFork'] }} diff --git a/eng/templates/jobs/build.yml b/eng/templates/jobs/build.yml index b2cdab6..b05fda4 100644 --- a/eng/templates/jobs/build.yml +++ b/eng/templates/jobs/build.yml @@ -32,3 +32,4 @@ jobs: python -m pip install build python -m build displayName: 'Build Python SDK for $(PYTHON_VERSION)' + - template: /eng/templates/steps/generate-component-governance-requirements.yml@self diff --git a/eng/templates/official/jobs/build-artifacts.yml b/eng/templates/official/jobs/build-artifacts.yml index ba5af08..c11318d 100644 --- a/eng/templates/official/jobs/build-artifacts.yml +++ b/eng/templates/official/jobs/build-artifacts.yml @@ -31,3 +31,4 @@ jobs: python -m pip install build python -m build displayName: 'Build Python SDK' + - template: /eng/templates/steps/generate-component-governance-requirements.yml@self diff --git a/eng/templates/official/release/build-artifacts.yml b/eng/templates/official/release/build-artifacts.yml index d05ec7e..53287ed 100644 --- a/eng/templates/official/release/build-artifacts.yml +++ b/eng/templates/official/release/build-artifacts.yml @@ -72,4 +72,7 @@ jobs: python -m pip install build cd ${{ parameters.projectDirectory }} python -m build - displayName: 'Build ${{ parameters.projectDisplayName }}' \ No newline at end of file + displayName: 'Build ${{ parameters.projectDisplayName }}' + - template: /eng/templates/steps/generate-component-governance-requirements.yml@self + parameters: + projectDirectory: ${{ parameters.projectDirectory }} \ No newline at end of file diff --git a/eng/templates/steps/generate-component-governance-requirements.yml b/eng/templates/steps/generate-component-governance-requirements.yml new file mode 100644 index 0000000..f84287b --- /dev/null +++ b/eng/templates/steps/generate-component-governance-requirements.yml @@ -0,0 +1,39 @@ +parameters: + - name: projectDirectory + type: string + default: '.' + +steps: + - bash: | + if ! python -c "import tomllib" 2>/dev/null; then + python -m pip install tomli + fi + + python - <<'PY' + from pathlib import Path + + try: + import tomllib + except ModuleNotFoundError: + import tomli as tomllib + + pyproject = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8")) + optional_dependencies = pyproject["project"].get("optional-dependencies", {}) + requirements = [ + *pyproject["build-system"].get("requires", []), + *pyproject["project"].get("dependencies", []), + *( + dependency + for group in optional_dependencies.values() + for dependency in group + ), + ] + requirements = list(dict.fromkeys(requirements)) + Path("requirements.txt").write_text( + "\n".join(requirements) + "\n", + encoding="utf-8", + ) + print(f"Generated requirements.txt with {len(requirements)} direct dependencies") + PY + displayName: 'Generate Component Governance requirements' + workingDirectory: $(Build.SourcesDirectory)/${{ parameters.projectDirectory }} \ No newline at end of file