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]

Reply via email to