This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git
The following commit(s) were added to refs/heads/main by this push:
new e6e5e5b Remove stages
e6e5e5b is described below
commit e6e5e5b5cab768a0456be05dcdc6741252e7e619
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon May 19 18:43:42 2025 +0100
Remove stages
---
atr/blueprints/admin/admin.py | 2 +-
atr/db/__init__.py | 3 ---
atr/db/models.py | 12 ------------
atr/routes/__init__.py | 4 ----
atr/routes/announce.py | 1 -
atr/routes/release.py | 1 -
atr/routes/resolve.py | 1 -
atr/routes/start.py | 1 -
atr/routes/voting.py | 1 -
atr/ssh.py | 1 -
atr/user.py | 11 -----------
migrations/versions/0002_2025.05.19_93ec427d.py | 26 +++++++++++++++++++++++++
12 files changed, 27 insertions(+), 37 deletions(-)
diff --git a/atr/blueprints/admin/admin.py b/atr/blueprints/admin/admin.py
index 3b86be4..2c5dc5b 100644
--- a/atr/blueprints/admin/admin.py
+++ b/atr/blueprints/admin/admin.py
@@ -276,7 +276,7 @@ async def admin_projects_update() -> str |
response.Response | tuple[Mapping[str
@admin.BLUEPRINT.route("/releases")
async def admin_releases() -> str:
- """Display a list of all releases across all stages and phases."""
+ """Display a list of all releases across all phases."""
async with db.session() as data:
releases = await data.release(_project=True,
_committee=True).order_by(models.Release.name).all()
return await quart.render_template("releases.html", releases=releases)
diff --git a/atr/db/__init__.py b/atr/db/__init__.py
index 4c643b3..942613c 100644
--- a/atr/db/__init__.py
+++ b/atr/db/__init__.py
@@ -344,7 +344,6 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
def release(
self,
name: Opt[str] = NOT_SET,
- stage: Opt[models.ReleaseStage] = NOT_SET,
phase: Opt[models.ReleasePhase] = NOT_SET,
created: Opt[datetime.datetime] = NOT_SET,
project_name: Opt[str] = NOT_SET,
@@ -364,8 +363,6 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
if is_defined(name):
query = query.where(models.Release.name == name)
- if is_defined(stage):
- query = query.where(models.Release.stage == stage)
if is_defined(phase):
query = query.where(models.Release.phase == phase)
if is_defined(created):
diff --git a/atr/db/models.py b/atr/db/models.py
index 6414abb..fe7ab68 100644
--- a/atr/db/models.py
+++ b/atr/db/models.py
@@ -285,17 +285,6 @@ class VoteEntry(schema.Strict):
end: datetime.datetime
-class ReleaseStage(str, enum.Enum):
- # A release candidate is being prepared
- RELEASE_CANDIDATE = "release_candidate"
- # A release is being prepared
- RELEASE = "release"
- # An existing release is being imported from ASF SVN dist
- MIGRATION = "migration"
- # A release candidate has failed at any CANDIDATE stage
- FAILED = "failed"
-
-
class ReleasePhase(str, enum.Enum):
# Step 1: The candidate files are added from external sources and checked
by ATR
RELEASE_CANDIDATE_DRAFT = "release_candidate_draft"
@@ -486,7 +475,6 @@ class Release(sqlmodel.SQLModel, table=True):
# We guarantee that "{project.name}-{version}" is unique
# Therefore we can use that for the name
name: str = sqlmodel.Field(default="", primary_key=True, unique=True)
- stage: ReleaseStage
phase: ReleasePhase
created: datetime.datetime =
sqlmodel.Field(sa_column=sqlalchemy.Column(UTCDateTime))
released: datetime.datetime | None = sqlmodel.Field(default=None,
sa_column=sqlalchemy.Column(UTCDateTime))
diff --git a/atr/routes/__init__.py b/atr/routes/__init__.py
index 55f9656..d9ba242 100644
--- a/atr/routes/__init__.py
+++ b/atr/routes/__init__.py
@@ -264,10 +264,6 @@ class CommitterSession:
self._projects = await user.projects(self.uid)
return self._projects
- @property
- async def user_releases(self) -> list[models.Release]:
- return await user.releases(self.uid)
-
class FlashError(RuntimeError): ...
diff --git a/atr/routes/announce.py b/atr/routes/announce.py
index ad5e680..0bc397d 100644
--- a/atr/routes/announce.py
+++ b/atr/routes/announce.py
@@ -257,7 +257,6 @@ async def _promote(release: models.Release, data:
db.Session, preview_revision_n
models.latest_revision_number_query() == preview_revision_number,
)
.values(
- stage=models.ReleaseStage.RELEASE,
phase=models.ReleasePhase.RELEASE,
released=datetime.datetime.now(datetime.UTC),
)
diff --git a/atr/routes/release.py b/atr/routes/release.py
index 0b35362..85f045e 100644
--- a/atr/routes/release.py
+++ b/atr/routes/release.py
@@ -101,7 +101,6 @@ async def releases() -> str:
# Releases are public, so we don't need to filter by user
async with db.session() as data:
releases = await data.release(
- stage=models.ReleaseStage.RELEASE,
phase=models.ReleasePhase.RELEASE,
_committee=True,
_project=True,
diff --git a/atr/routes/resolve.py b/atr/routes/resolve.py
index cd7f64d..d23e2e5 100644
--- a/atr/routes/resolve.py
+++ b/atr/routes/resolve.py
@@ -115,7 +115,6 @@ async def selected_post(
# Update the release phase based on vote result
if vote_result == "passed":
- release.stage = models.ReleaseStage.RELEASE
release.phase = models.ReleasePhase.RELEASE_PREVIEW
success_message = "Vote marked as passed"
destination = finish.selected
diff --git a/atr/routes/start.py b/atr/routes/start.py
index 307fcd8..94ea80e 100644
--- a/atr/routes/start.py
+++ b/atr/routes/start.py
@@ -81,7 +81,6 @@ async def create_release_draft(project_name: str, version:
str, asf_uid: str) ->
raise routes.FlashError(f'Invalid version name "{version}":
{version_name_error}')
release = models.Release(
- stage=models.ReleaseStage.RELEASE_CANDIDATE,
phase=models.ReleasePhase.RELEASE_CANDIDATE_DRAFT,
project_name=project.name,
project=project,
diff --git a/atr/routes/voting.py b/atr/routes/voting.py
index e8529d6..d0480dc 100644
--- a/atr/routes/voting.py
+++ b/atr/routes/voting.py
@@ -222,7 +222,6 @@ async def _promote(
models.latest_revision_number_query() == selected_revision_number,
)
.values(
- stage=models.ReleaseStage.RELEASE_CANDIDATE,
phase=models.ReleasePhase.RELEASE_CANDIDATE,
)
)
diff --git a/atr/ssh.py b/atr/ssh.py
index 2a25bfc..63629e9 100644
--- a/atr/ssh.py
+++ b/atr/ssh.py
@@ -537,7 +537,6 @@ async def _step_07c_ensure_release_object_for_write(
project_name=project.name,
project=project,
version=version_name,
- stage=models.ReleaseStage.RELEASE_CANDIDATE,
phase=models.ReleasePhase.RELEASE_CANDIDATE_DRAFT,
created=datetime.datetime.now(datetime.UTC),
)
diff --git a/atr/user.py b/atr/user.py
index dff697a..16b37bc 100644
--- a/atr/user.py
+++ b/atr/user.py
@@ -22,7 +22,6 @@ import functools
import atr.config as config
import atr.db as db
import atr.db.models as models
-import atr.util as util
async def candidate_drafts(uid: str, user_projects: list[models.Project] |
None = None) -> list[models.Release]:
@@ -74,13 +73,3 @@ async def projects(uid: str, committee_only: bool = False,
super_project: bool =
if (uid in p.committee.committee_members) or (uid in
p.committee.committers):
user_projects.append(p)
return user_projects
-
-
-async def releases(uid: str) -> list[models.Release]:
- user_releases: list[models.Release] = []
- async with db.session() as data:
- # TODO: We're limiting this to candidates
- # We should either call this user_candidate_releases, or change the
query
- releases = await
data.release(stage=models.ReleaseStage.RELEASE_CANDIDATE, _project=True,
_committee=True).all()
- user_releases = util.user_releases(uid, releases)
- return user_releases
diff --git a/migrations/versions/0002_2025.05.19_93ec427d.py
b/migrations/versions/0002_2025.05.19_93ec427d.py
new file mode 100644
index 0000000..55d8bd7
--- /dev/null
+++ b/migrations/versions/0002_2025.05.19_93ec427d.py
@@ -0,0 +1,26 @@
+"""Remove stages
+
+Revision ID: 0002_2025.05.19_93ec427d
+Revises: 0001_2025.05.15_1d3ee5a0
+Create Date: 2025-05-19 17:39:29.657125+00:00
+"""
+
+from collections.abc import Sequence
+
+import sqlalchemy as sa
+from alembic import op
+
+# Revision identifiers, used by Alembic
+revision: str = "0002_2025.05.19_93ec427d"
+down_revision: str | None = "0001_2025.05.15_1d3ee5a0"
+branch_labels: str | Sequence[str] | None = None
+depends_on: str | Sequence[str] | None = None
+
+
+def upgrade() -> None:
+ op.drop_column("release", "stage")
+
+
+def downgrade() -> None:
+ # Stage was unused, so it is not necessary to map phases to stages here
+ op.add_column("release", sa.Column("stage", sa.VARCHAR(length=17),
nullable=False))
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]