You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Versions: keep type of version in sync with the project (#10606)
* Versions: keep type of version in sync with the project
So, there are a couple of problems here:
- Versions have been created with the type set as unknown,
and where never updated to the correct type.
I was able to track down this to projects created before 2018,
so probably an old bug allowed this to happen.
- Stable machine versions are basically an alias for the latest stable version
of the project, and they can be a branch or a tag,
this means that if this version is a branch,
so will be the "stable" version, same for tags.
Currently, we aren't updating the version type,
if the stable version was created as a branch,
it will remain as a branch, even if the latest stable version
is a tag, and vice versa.
- Latest machine versions are basically an alias for the default branch
of the project, they are always branches.
Since we allow to have non-machine latest versions,
they can be a branch or a tag. If this version was changed
back to be a non-machine version, currently it will remain as branch
or tag, this was incorrect.
Our new clone/checkout pattern relies on the type of the version always
being correct, so it was failing for some projects.
- Fixes#10600
- Fixes#10601
After deploy, we need to clean up the invalid versions (versions with
"unknown" type). We can do that by:
- Updating all latest machine versions to be branches.
```python
Version.objects.filter(type="unknown", machine=True).update(type="branch")
```
- Re-evaluate the stable version of all projects that have a machine
stable version, so they can have the correct type.
```
for project in Project.objects.filter(versions__machine=True).distinct():
project.update_stable_version()
```
- Check all remaining active versions with "unknown" type, and update them to
be branches or tags (324). We can use a simple regex to see the
version identifier looks like a commit.
```python
vesions = Version.objects.filter(type="unknown", active=True)
commit_regex = re.compile(r"^([a-f0-9]{40})|([a-f0-9]{7})$")
for version in versions:
if commit_regex.match(version.identifier):
version.type = "tag"
else:
version.type = "branch"
version.save()
```
0 commit comments