Skip to content

release: v13.0.0#3641

Merged
polarathene merged 6 commits intomasterfrom
release/v13.0.0
Nov 26, 2023
Merged

release: v13.0.0#3641
polarathene merged 6 commits intomasterfrom
release/v13.0.0

Conversation

@georglauterbach
Copy link
Copy Markdown
Member

Description

This PR marks the feature freeze phase for the v13.0.0 release.

The current :edge image will be tested for roughly 7 days and if no bugs get reported, v13.0.0 will be released. During this testing period, only PRs that do not change functionality will be merged.

If you want to support us, give the latest :edge image a try and report any issues you encounter back to this PR.

Documentation updates may be merged. Feature freeze is in place until 24 Nov 2023.


@polarathene @casperklein please apply suggestions immediately to the branch, no need to ask me if you want to change stuff up; already spent too much time on CHANGELOG.md and drafting the release

Type of change

  • Release

Release-Checklist:

  • Update CHANGELOG.md
  • Update version in VERSION
  • Draft release (still needs proper text description for changes)

@georglauterbach georglauterbach added priority/high kind/release This PR marks a release labels Nov 17, 2023
@georglauterbach georglauterbach added this to the v13.0.0 milestone Nov 17, 2023
@georglauterbach georglauterbach self-assigned this Nov 17, 2023
casperklein
casperklein previously approved these changes Nov 17, 2023
@BozhanL
Copy link
Copy Markdown

BozhanL commented Nov 20, 2023

It seems that this line of document needs to be changed after #3335.

To specify a user-defined Sieve filter place a `.dovecot.sieve` file into a virtual user's mail folder e.g. `/var/mail/example.com/user1/.dovecot.sieve`. If this file exists dovecot will apply the filtering rules.

@polarathene

This comment was marked as resolved.

Copy link
Copy Markdown
Member

@polarathene polarathene left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revisions, I'll apply them 👍

Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
polarathene
polarathene previously approved these changes Nov 23, 2023
Copy link
Copy Markdown
Member

@polarathene polarathene left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have the energy to organize the changelog to better highlight more noteworthy changes, but big kudos to @georglauterbach for taking the time to piece this all together 🙏

casperklein
casperklein previously approved these changes Nov 23, 2023
@polarathene
Copy link
Copy Markdown
Member

These two docs updates might be worth squeezing in last minute for this release?

If my one is approved before @georglauterbach responds, I'll merge both and update the changelog here 👍

@georglauterbach
Copy link
Copy Markdown
Member Author

@polarathene please update this PR (Changelog) and merge. Keep the feature-freeze labels though. I will publish the tag afterwards after I will have updated the release description.

casperklein and others added 2 commits November 25, 2023 14:12
Adds 3 new PRs, but otherwise categorized changes along with some additional revision to wording of changes.
@polarathene polarathene dismissed stale reviews from casperklein and themself via f30af69 November 26, 2023 00:56
Copy link
Copy Markdown
Member

@polarathene polarathene left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added the 3 additional PRs, and had some time to better organize the changes for users to sift through 👍

@polarathene polarathene merged commit b663e10 into master Nov 26, 2023
@polarathene polarathene deleted the release/v13.0.0 branch November 26, 2023 01:00
@casperklein
Copy link
Copy Markdown
Member

casperklein commented Nov 26, 2023

@polarathene please update this PR (Changelog) and merge. Keep the feature-freeze labels though. I will publish the tag afterwards after I will have updated the release description.

That's bad. A new tag/release should be created directly after merging this PR. At the moment, the update-check notifies about the v13 release, however there isn't a new image to download yet.

@polarathene
Copy link
Copy Markdown
Member

polarathene commented Nov 26, 2023

At the moment, the update-check notifies about the v13 release, however there isn't a new image to download yet.

Sorry, I wasn't aware of that and just following instructions 😓


It might be better if we query the github releases for a new release instead?

# `-H` => Request JSON response
# `-L` => `releases/latest` is a redirect (unlike direct release tags)
$ curl -LH "accept: application/json" https://github.com/docker-mailserver/docker-mailserver/releases/latest

{"id":42,"tag_name":"v12.1.0","update_url":"...","update_authenticity_token":"...","delete_url":"...","delete_authenticity_token":"...","edit_url":"..."}

With that we can probably use tag_name, since it's JSON just throw that into jq:

$ curl -sLH "accept: application/json" https://github.com/docker-mailserver/docker-mailserver/releases/latest | jq -r .tag_name
v12.1.0

Now you have the same value for LATEST to handle here?:

# get remote version information
LATEST=$(curl -Lsf "${VERSION_URL}")


While unlikely to be an issue, if we ever do make releases that aren't sequential (eg: a v12.2.0, or more realistically a 12.1.1 security patch), querying releases/latest perhaps won't work as well since it'd get an older release, even if we had released a newer v13 update moments prior.

If you query the next patch/minor/major (releases/v13.0.1, releases/v13.1.0, releases/v14.0.0) with 3 requests instead, you'd have something a bit more resilient to that concern.

@iruizr7
Copy link
Copy Markdown

iruizr7 commented Nov 26, 2023

Big thanks to everyone involved! This project is definitely the easiest and quickest way of installing a personal or SOHO email server with all the guarantees. Keep on team! 🎆

@casperklein
Copy link
Copy Markdown
Member

It might be better if we query the github releases for a new release instead?

Afaik the API is rate limited. If there are other things running on the same host using the API, that can lead to problems. I would stick with the current approach. Also it's rather unusual to merge the release PR, but not creating a release 😉

@georglauterbach
Copy link
Copy Markdown
Member Author

I will take care within the next hours.

@georglauterbach
Copy link
Copy Markdown
Member Author

That commit message though:

image

😆😆😆😆😆

@polarathene
Copy link
Copy Markdown
Member

polarathene commented Nov 26, 2023

Afaik the API is rate limited.

What rate limit?

However, in this case it's just a standard web request to Github. It is effectively no different of a request than the one you're already making for a file at the repo?:

VERSION_URL='https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/VERSION'

Which you default to once a day:

VARS[UPDATE_CHECK_INTERVAL]="${UPDATE_CHECK_INTERVAL:=1d}"

UPDATE_CHECK_INTERVAL='1d'


I would stick with the current approach.

Your approach is what caused the false-positive for a new release being available. The approach I've suggested doesn't have any notable regression but avoids the problem scenario you noticed from occurring?

Seems like it'd be better to query the actual latest GH release and compare that to the VERSION.

VERSION may be better suited as an ENV DMS_RELEASE in the Dockerfile (which could additionally be provided as an ARG since the CI should have the tag on release, avoiding a past issue where VERSION was not incremented with a release tag).

Also it's rather unusual to merge the release PR, but not creating a release 😉

Already stated that I was following @georglauterbach request. If the version check is handled the way I've proposed it fixes two release bugs related to VERSION experienced so far.

It shouldn't matter if there is a delay between a release PR being merged and when a release is officially tagged/published. This had a less than 15hr delay which I have no issue with, nothing else was being merged inbetween.

@georglauterbach
Copy link
Copy Markdown
Member Author

It is definitely my fault that there is a delay here between the merging of this PR and the release; I apologize for that - it won't happen again.

@casperklein
Copy link
Copy Markdown
Member

casperklein commented Nov 27, 2023

You're probably thinking of the API service at https://api.github.com?
If it were rate-limited like the actual GH REST API, it would include that information in the response?

Yes, I've things mixed up 👍

My main point was just, that the VERSION file shouldn't be updated, when not making a new release (makes no sense). Just do both at the same time and everything is good. Fixing problems (enhancing the update check) that aren't real problems seemed unnecessary to me.

That said, it makes no difference to me checking the version file or the latest release as you suggested. Normally the results shouldn't differ. If you however like to change the check, go for it 👍

Edit: After more thinking, I came to the conclusion, that checking the release is more logical and therefore better.

Already stated that I was following @georglauterbach request.

I didn't want to offense you or Georg in any way. I just wanted to make aware of this and let Georg know, not to delay the release for too long. It's really no big issue to make the release some hours later. We are humans after all.

I apologize for that - it won't happen again.

Again, if I sounded too harsh, that wasn't my intention! ✌️

@polarathene
Copy link
Copy Markdown
Member

polarathene commented Nov 27, 2023

My main point was just, that the VERSION file shouldn't be updated, when not making a new release (makes no sense). Just do both at the same time and everything is good.

That can be automated:

Verbose breakdown

github.ref will differ for publishing :edge, so we'll still need to handle that.

The github context object docs suggest that we could use github.ref_name to get just the tag value and github.ref_type to determine if it's a tag trigger with a conditional expression.

We could add the expression here to set DMS_RELEASE as a new ARG input.


Reference - Sources

build-args: |
VCS_REVISION=${{ github.sha }}
VCS_VERSION=${{ steps.get-version.outputs.version }}

FROM stage-main AS stage-final
ARG VCS_REVISION=unknown
ARG VCS_VERSION=edge

# ARG invalidates cache when it is used by a layer (implicitly affects RUN)
# Thus to maximize cache, keep these lines last:
LABEL org.opencontainers.image.revision=${VCS_REVISION}
LABEL org.opencontainers.image.version=${VCS_VERSION}

[[ ${ENABLE_UPDATE_CHECK} -eq 1 ]] && _register_start_daemon '_start_daemon_update_check'

          build-args: |
            DMS_RELEASE=${{ github.ref_type == 'tag' && github.ref_name || 'edge' }}
            VCS_REVISION=${{ github.sha }}
FROM stage-main AS stage-final
ARG DMS_RELEASE=edge
ARG VCS_REVISION=unknown
# ARG invalidates cache when it is used by a layer (implicitly affects RUN)
# Thus to maximize cache, keep these lines last:
LABEL org.opencontainers.image.revision=${VCS_REVISION}
LABEL org.opencontainers.image.version=${DMS_RELEASE}
ENV DMS_RELEASE=${DMS_RELEASE}
VERSION="${DMS_VERSION}"
  [[ ${ENABLE_UPDATE_CHECK} -eq 1 && ${DMS_RELEASE} != 'edge' ]] && _register_start_daemon '_start_daemon_update_check'

You could of course create the /VERSION file instead of an ENV this way, but with an ENV it's more clear that the service isn't used with :edge (doesn't really make sense to?)


Fixing problems (enhancing the update check) that aren't real problems seemed unnecessary to me.

  1. :edge should not care about the update process, these concerns should not have been raised:
  2. In the past a release was made without bumping VERSION accordingly.
  3. This concern you raised with the release PR and delayed tagging of the release would again be a non-issue.
    • :edge unaffected since it's not actually tied to the /VERSION file it compares to Github VERSION with.
    • Tagged releases wouldn't notify until a new tagged release is actually published.

All concerns related to the update checking script, all resolved by better integration + checking.


Normally the results shouldn't differ. If you however like to change the check, go for it 👍

Agreed, I'll raise a PR so these concerns don't occur again.

EDIT: Done 🚀

Edit: After more thinking, I came to the conclusion, that checking the release is more logical and therefore better.

🎉

I didn't want to offense you or Georg in any way. I just wanted to make aware of this and let Georg know, not to delay the release for too long. It's really no big issue to make the release some hours later. We are humans after all.

No offense taken! 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/release This PR marks a release priority/high

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants