Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/build-and-publish.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions doc/changes/unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ from the developer guide.
* #456: Documented how to discover PTB nox sessions in the user guide
* #933: Added an agent skill for PTB work

## Bug Fixes

* #946: Added project name and version context to SBOM file name

## Refactoring

* #934: Removed unused, experimental Nox session `lint:import`
10 changes: 9 additions & 1 deletion exasol/toolbox/nox/_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
from exasol.toolbox.util.dependencies.poetry_dependencies import get_dependencies
from exasol.toolbox.util.dependencies.track_vulnerabilities import DependenciesAudit
from exasol.toolbox.util.dependencies.update_dependencies import DependencyUpdater
from exasol.toolbox.util.version import (
project_name_and_version_from_poetry,
)
from noxconfig import PROJECT_CONFIG


Expand Down Expand Up @@ -109,8 +112,12 @@ def generate_sbom(session: Session) -> None:
Note: SPDX version 2 is used as no stable Python tool exists yet
for generating SPDX version 3.
"""
project_name, version = project_name_and_version_from_poetry(
working_directory=PROJECT_CONFIG.root_path
)
sbom_filename = f"{project_name}-{version}.spdx.json"
bom_cdx_json = PROJECT_CONFIG.root_path / "bom.cdx.json"
bom_spdx_json = PROJECT_CONFIG.root_path / "bom.spdx.json"
bom_spdx_json = PROJECT_CONFIG.root_path / sbom_filename
session.run("cyclonedx-py", "environment", "-o", bom_cdx_json)
session.run(
"sbomconvert",
Expand All @@ -124,3 +131,4 @@ def generate_sbom(session: Session) -> None:
bom_spdx_json,
)
session.run("test", "-s", bom_spdx_json)
print(sbom_filename)
Comment thread
kratz00 marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ jobs:

- name: Generate SBOM
id: generate-sbom
run: poetry run -- nox -s dependency:sbom

run: |
SBOM_NAME="$(poetry run -- nox -s dependency:sbom)"
echo "SBOM_NAME=$SBOM_NAME" >> "$GITHUB_OUTPUT"
- name: Publish Release to PyPi
id: publish-release-to-pypi
env:
Expand All @@ -46,9 +47,10 @@ jobs:
id: publish-release-to-github
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SBOM_NAME: ${{ steps.generate-sbom.outputs.SBOM_NAME }}
run: >
gh release create ${GITHUB_REF_NAME}
--title ${GITHUB_REF_NAME}
--notes-file ./doc/changes/changes_${GITHUB_REF_NAME}.md
dist/*
bom.spdx.json
"$SBOM_NAME"
17 changes: 17 additions & 0 deletions exasol/toolbox/util/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
total_ordering,
wraps,
)
from pathlib import Path
from shutil import which

from exasol.toolbox.error import ToolboxError
Expand Down Expand Up @@ -104,3 +105,19 @@ def upgrade_version_from_poetry(t: ReleaseTypes):
text=True,
)
return Version.from_string(output.stdout.strip())


@poetry_command
def project_name_and_version_from_poetry(
working_directory: Path | None = None,
) -> tuple[str, Version]:
"""Return the project name and version reported by Poetry."""
output = subprocess.run( # nosec: B603, B607 - allow fixed poetry command
["poetry", "version", "--no-ansi"],
cwd=working_directory,
capture_output=True,
text=True,
check=True,
)
project_name, version = output.stdout.strip().rsplit(maxsplit=1)
return project_name.replace("-", "_"), Version.from_string(version)
11 changes: 10 additions & 1 deletion test/unit/nox/_dependencies_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from exasol.toolbox.nox import _dependencies
from exasol.toolbox.nox import _shared as nox_shared
from exasol.toolbox.util.dependencies.audit import Vulnerabilities
from exasol.toolbox.util.version import Version


@pytest.mark.parametrize(
Expand Down Expand Up @@ -91,10 +92,18 @@ def test_report_resolved_vulnerabilities(
def test_generate_sbom(monkeypatch, nox_session, tmp_path, test_project_config_factory):
project_config = test_project_config_factory(root_path=tmp_path)
monkeypatch.setattr(_dependencies, "PROJECT_CONFIG", project_config)
monkeypatch.setattr(
Comment thread
ArBridgeman marked this conversation as resolved.
_dependencies,
"project_name_and_version_from_poetry",
lambda working_directory=None: (
"exasol_toolbox",
Version.from_string("10.3.0"),
),
)

_dependencies.generate_sbom(nox_session)

expected_file = tmp_path / "bom.spdx.json"
expected_file = tmp_path / "exasol_toolbox-10.3.0.spdx.json"
bom_spdx_json = json.loads(expected_file.read_text())
assert bom_spdx_json["SPDXID"] == "SPDXRef-DOCUMENT"
assert bom_spdx_json["spdxVersion"] == "SPDX-2.3"
12 changes: 12 additions & 0 deletions test/unit/util/version_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
Version,
poetry_command,
)
from noxconfig import PROJECT_CONFIG


@pytest.mark.parametrize(
Expand Down Expand Up @@ -99,3 +100,14 @@ def test():

with pytest.raises(ToolboxError):
test()


def test_project_name_and_version_from_poetry():
Comment thread
Rimsha2535 marked this conversation as resolved.
from exasol.toolbox import __version__
from exasol.toolbox.util.version import project_name_and_version_from_poetry

name, version = project_name_and_version_from_poetry(
working_directory=PROJECT_CONFIG.root_path
)
assert name == "exasol_toolbox"
assert version == Version.from_string(__version__)