Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release etcd 3.5.0-alpha.0 #12498

Closed
ptabor opened this issue Nov 27, 2020 · 27 comments
Closed

Release etcd 3.5.0-alpha.0 #12498

ptabor opened this issue Nov 27, 2020 · 27 comments

Comments

@ptabor
Copy link
Contributor

ptabor commented Nov 27, 2020

Let's pre-release etcd 3.5.0 branch, e.g. as 3.5.0-alpha.0

Goals

This will allow:

  • customers: test integration with etcd-3.5 from their applications
  • publish documents how to integrate with etcd-3.5
  • test our release process.

Why 3.5.0-alpha.0 ?

  • It's the pre-release version that sorts as lowest according to: https://semver.org/.
    It's 3.5.0-alpha.0 < 3.5.0-alpha.1 < 3.5.0-beta.0 < 3.5.0-c.0< 3.5.0-dev.0 < 3.5.0-pre.0

Shell we create branch "release-3.5" before releasing etcd-3.5.0-alpha.0 ?

I would softly suggest not for following reasons:

  • It would require periodic manual merging of changes from master to release-3.5 that is some (minor) toil.
  • Kubernetes is tagging pre-release versions on the master branch:
    • kubernetes/kubernetes@3af376d tags v1.20.0-beta.2
    • there is no 'remotes/origin/release-1.20' in kubernetes yet.
    • git describe is able to self-identify and name the current state of the repo. On kubernetes it returns v1.20.0-beta.2-86-g5ed4b76a03b. Currently on etcd master branch it returns: v3.3.0-rc.0-3744-g28d1af294 that is pretty misleading.

How:

BRANCH="master" ./scripts/release 3.5.0-alpha.0
  • Just to tag the repository (without generation of tarballs) following commands should be sufficient:
   DRY_RUN=false TARGET_VERSION="v3.5.0-alpha.0" ./scripts/release_mod.sh update_versions
   edit api/version/version.go
   git commit
   git push
   DRY_RUN=false REMOTE_REPO="origin" ./scripts/release_mod.sh push_mod_tags

@gyuho

@trusch
Copy link

trusch commented Dec 4, 2020

Is there an ETA for this alpha release?

@ptabor
Copy link
Contributor Author

ptabor commented Dec 7, 2020

This needs to be executed by a maintainer (usually @gyuho).

@sagikazarmark
Copy link

Would it make sense to tag a new v2 client version with this release (or rather together with 3.5)? Or maybe it can be tagged sooner?

@ptabor
Copy link
Contributor Author

ptabor commented Dec 11, 2020

@sagikazarmark

The provided scripts would tag them as v2.305.0-alpha.0 automatically:
https://github.com/etcd-io/etcd/blob/master/scripts/release_mod.sh#L71

@sagikazarmark
Copy link

Cool! We just have to wait for a tag then. :)

@xkeyideal
Copy link

waiting for a v3.5 tag to use new client

@jalavosus
Copy link

Any updates on tagging 3.5.0? We'd like to start integrating an etcd client into our setup as soon as possible.

@scDisorder
Copy link

yep, it becomes uncomfortable because I cannot interact with my generated files with newest grpc version

@AlekSi
Copy link

AlekSi commented Jan 8, 2021

Temporary workaround:

replace (
	go.etcd.io/etcd/api/v3 v3.5.0-pre => go.etcd.io/etcd/api/v3 v3.0.0-20210107172604-c632042bb96c
	go.etcd.io/etcd/pkg/v3 v3.5.0-pre => go.etcd.io/etcd/pkg/v3 v3.0.0-20210107172604-c632042bb96c
)

Waiting for v3.5.0-pre or v3.5.0-alpha.0 tag like everyone else.

@sagikazarmark
Copy link

This workaround works great for applications, but replaces are not propagated from libraries, so go getting a library would result in an error. Libraries like viper and go-kit has no choice, but to wait for a release :\

@jingyih
Copy link
Contributor

jingyih commented Jan 13, 2021

Currently there are still open issues / PRs which are tagged to milestone v3.5. They need to either be closed or moved to a later release. Before releasing v3.4, we should also try to fix as much flaky tests as possible (which @ptabor has fixed a lot!). Before releasing v3.4, we also had some benchmarks, both on etcd itself, and with its major user kubernetes.

For reference: #10943

@sagikazarmark
Copy link

I'm rooting for moving them to a later release at this point 🙂

@ptabor
Copy link
Contributor Author

ptabor commented Jan 13, 2021

I would not think about release of this alpha.0 as a request to start full release-3.5 train.

It's common for many projects to have many alphas that have different sets of features to get early feedback on them
(and test the release process after changes itself). If the window before first pre-release and stable-release is short and the feature set is huge - it's hard to collect meaningful feedback even from early-adopters.

Please don't interpret this post as opposing to cut 3.5 earlier as I support release-often, release-early paradigm. I'm just suggesting that the release of 3.5.0-alpha.0 should IMHO be orthogonal to decision whether we consider this release feature-complete-enough or not-yet.

@gyuho
Copy link
Contributor

gyuho commented Jan 14, 2021

@ptabor Sorry for being the blocker. I would really like to add more people in our release process (really nothing fancy we need here, just write access to the repository). What do you think @jpbetz?

@ptabor Do we have a list of pending changes to make this happen? I will find sometime this and next week to prioritize.

@fxposter
Copy link

I believe most people here are talking not about 3.5 release specifically, but instead the first release that can be explicitly referenced in go.mod instead of relying on dates/commits. IE: if there was a possibility to release 3.4 with proper go modules - most people would be fine with that.

@sagikazarmark
Copy link

I would not think about release of this alpha.0 as a request to start full release-3.5 train.

Given how long the community has been waiting for module support (no blame, just stating a fact), I'd prioritize that and delay other features to a next version (especially since many issues are still labeled as investigating). But I agree that's a different topic than releasing an alpha to start testing the module support.

BTW, testing module support was already possible with a few workarounds mentioned above and I've been playing with them a lot (mostly the clients). So I wouldn't expect an alpha release to add much to the testing capabilities. Libraries probably still won't upgrade to alpha versions.

@ptabor
Copy link
Contributor Author

ptabor commented Jan 14, 2021

@ptabor Do we have a list of pending changes to make this happen? I will find sometime this and next week to prioritize.

@gyuho: #12497 is the only PR we need to submit before enabling the release process.

@ptabor
Copy link
Contributor Author

ptabor commented Jan 18, 2021

#12497 - got submitted. Thank you @jingyih .

I was playing with the release script today, to make sure it's safe.
This is full DRY_RUN output:

export PATH="{...}/go1.14.3/bin/:$PATH"
DRY_RUN="true" REPOSITORY=`pwd` BRANCH="20210118-release-attempt" ./scripts/release 3.5.0-alpha.0

(overridden repository for speed, safety & local changes).

That's the full output: https://termbin.com/vua6

The most important commands the scripts execute on repo (I appreciate second look):

Committs:

% 'git' 'diff' '--staged'
diff --git a/api/version/version.go b/api/version/version.go
index 622e75132..af132f821 100644
--- a/api/version/version.go
+++ b/api/version/version.go
@@ -26,7 +26,7 @@ import (
 var (
 	// MinClusterVersion is the min cluster version this etcd binary is compatible with.
 	MinClusterVersion = "3.0.0"
-	Version           = "3.5.0-pre"
+	Version           = "3.5.0-alpha.0"
 	APIVersion        = "unknown"
 
 	// Git SHA Value will be set during build
diff --git a/client/v2/go.mod b/client/v2/go.mod
index 0c12a87aa..04abd2cc9 100644
--- a/client/v2/go.mod
+++ b/client/v2/go.mod
@@ -5,8 +5,8 @@ go 1.15
 require (
 	github.com/json-iterator/go v1.1.10
 	github.com/modern-go/reflect2 v1.0.1
-	go.etcd.io/etcd/api/v3 v3.5.0-pre
-	go.etcd.io/etcd/pkg/v3 v3.5.0-pre
+	go.etcd.io/etcd/api/v3 v3.5.0-alpha.0
+	go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0
 )
 
 replace (
diff --git a/client/v3/go.mod b/client/v3/go.mod

index a41d019e7..802a49ab2 100644
--- a/go.mod
+++ b/go.mod
@@ -19,13 +19,13 @@ require (
 	github.com/mattn/go-runewidth v0.0.9 // indirect
 	github.com/spf13/cobra v1.1.1
 	go.etcd.io/bbolt v1.3.5
-	go.etcd.io/etcd/api/v3 v3.5.0-pre
-	go.etcd.io/etcd/client/v2 v2.305.0-pre
-	go.etcd.io/etcd/client/v3 v3.5.0-pre
-	go.etcd.io/etcd/pkg/v3 v3.5.0-pre
-	go.etcd.io/etcd/raft/v3 v3.5.0-pre
-	go.etcd.io/etcd/server/v3 v3.5.0-pre
-	go.etcd.io/etcd/tests/v3 v3.5.0-pre
+	go.etcd.io/etcd/api/v3 v3.5.0-alpha.0
+	go.etcd.io/etcd/client/v2 v2.305.0-alpha.0
+	go.etcd.io/etcd/client/v3 v3.5.0-alpha.0
+	go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0
+	go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0
+	go.etcd.io/etcd/server/v3 v3.5.0-alpha.0
+	go.etcd.io/etcd/tests/v3 v3.5.0-alpha.0
 	go.uber.org/zap v1.16.0
 	golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
 	google.golang.org/grpc v1.29.1

as

% 'git' 'commit' '-m' 'version: bump up to 3.5.0-alpha.0'
[20210118-release-attempt 6188a584f] version: bump up to 3.5.0-alpha.0
 8 files changed, 31 insertions(+), 31 deletions(-)

% git push

Creates and pushes tags:

Tags for: go.etcd.io/etcd/api/v3 version:v3.5.0-alpha.0 tag:api/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'api/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/pkg/v3 version:v3.5.0-alpha.0 tag:pkg/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'pkg/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/raft/v3 version:v3.5.0-alpha.0 tag:raft/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'raft/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/client/v2 version:v2.305.0-alpha.0 tag:client/v2.305.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'client/v2.305.0-alpha.0' '--message' 'v2.305.0-alpha.0'
Tags for: go.etcd.io/etcd/client/v3 version:v3.5.0-alpha.0 tag:client/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'client/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/server/v3 version:v3.5.0-alpha.0 tag:server/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'server/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/etcdctl/v3 version:v3.5.0-alpha.0 tag:etcdctl/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'etcdctl/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/tests/v3 version:v3.5.0-alpha.0 tag:tests/v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'tests/v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
Tags for: go.etcd.io/etcd/v3 version:v3.5.0-alpha.0 tag:v3.5.0-alpha.0
% 'sleep' '2'
% 'git' 'tag' '--local-user' 'FD04D0F7DD98D020' '--sign' 'v3.5.0-alpha.0' '--message' 'v3.5.0-alpha.0'
# DRY_RUN:
  % git push -f origin api/v3.5.0-alpha.0 pkg/v3.5.0-alpha.0 raft/v3.5.0-alpha.0 client/v2.305.0-alpha.0 client/v3.5.0-alpha.0 server/v3.5.0-alpha.0 etcdctl/v3.5.0-alpha.0 tests/v3.5.0-alpha.0 v3.5.0-alpha.0

Tarballs are getting created:

Wrote release/etcd-v3.5.0-alpha.0-darwin-amd64.zip
% 'gofail' 'disable' 'server/etcdserver/' 'server/mvcc/backend/'
% 'gofail' 'disable' 'server/etcdserver/' 'server/mvcc/backend/'
% 'rm' '-f' 'bin/etcd'
% (cd server && 'env' 'CGO_ENABLED=0' 'GO_BUILD_FLAGS=' 'GOOS=windows' 'GOARCH=amd64' 'go' 'build' '-installsuffix=cgo' '-ldflags=-s -X=go.etcd.io/etcd/api/v3/version.GitSHA=6188a584f' '-o=../bin/etcd' '.')
% 'rm' '-f' 'bin/etcdctl'
% (cd etcdctl && 'env' 'CGO_ENABLED=0' 'GO_BUILD_FLAGS=' 'go' 'build' '-installsuffix=cgo' '-ldflags=-s -X=go.etcd.io/etcd/api/v3/version.GitSHA=6188a584f' '-o=../bin/etcdctl' '.')
SUCCESS: etcd_build (GOARCH=amd64)
Wrote release/etcd-v3.5.0-alpha.0-windows-amd64.zip
...
Wrote release/etcd-v3.5.0-alpha.0-linux-amd64.tar.gz
...
Wrote release/etcd-v3.5.0-alpha.0-linux-arm64.tar.gz
...
Wrote release/etcd-v3.5.0-alpha.0-linux-ppc64le.tar.gz
...
Wrote release/etcd-v3.5.0-alpha.0-linux-s390x.tar.gz

I'm not able to build dockers due to my operating-system.

Sending build context to Docker daemon  40.97MB
Step 1/8 : FROM us.gcr.io/k8s-artifacts-prod/build-image/debian-base:v2.1.0
 ---> c7c6c86897b6
Step 2/8 : ADD etcd /usr/local/bin/
 ---> 59770aad6bda
Step 3/8 : ADD etcdctl /usr/local/bin/
 ---> 0230068b9c5a
Step 4/8 : RUN mkdir -p /var/etcd/
 ---> Running in 7e9b8ae238a3

But there were no changes.

@ptabor
Copy link
Contributor Author

ptabor commented Jan 18, 2021

@gyuho:
Thank you for permissions to repository. Shell I interpret this as a request to finalize the process and perform tagging ?

I think there are following decisions to make:

  1. Can we tag the repository now - independently whether we will release 3.5 sooner or later ? [recommendation: yes]
  2. Do we create branch "release-3.5" [recommendation: no; motivation in https://github.com/Release etcd 3.5.0-alpha.0 #12498#issue-752205536 ]
  3. Do the tags / commits above look good to you ?
  4. Do we sign the tags with 'my private' key, or there are etcd-wide release credentials for this ?
  5. I have one PR (Modernize release script #12629) with some hopefully final tweaks to the script (already included in the log above)

@kevinburke1
Copy link

Hi, just following up to see if there are any updates here. Trying to update the etcd client in terraform and it's blocked on this change. hashicorp/terraform#25554

@ptabor
Copy link
Contributor Author

ptabor commented Feb 9, 2021

I plan to finalize #12652 (grpc-1.32 - that is code complete) and make experimental 3.5.0-alpha.0 release.

@gyuho Please go over the questions 1-3 from: #12498 (comment)

@sagikazarmark
Copy link

Any updates about the alpha release? @gyuho ?

@jpbetz
Copy link
Contributor

jpbetz commented Feb 23, 2021

Piotr Tabor Sorry for being the blocker. I would really like to add more people in our release process (really nothing fancy we need here, just write access to the repository). What do you think Joe Betz?

+1 to onboarding additional maintainers for release. @ptabor certainly knows his way around the related systems, so I feel he should have privileges. Anyone else we should involve @ptabor?

@jpbetz
Copy link
Contributor

jpbetz commented Feb 23, 2021

  1. Can we tag the repository now - independently whether we will release 3.5 sooner or later ?

I'm in favor of this.

  1. Do we create branch "release-3.5"

I agree that we should wait until we've eliminated any major known issues on master before branching.

  1. Do the tags / commits above look good to you ?

alpha tags look right to me

  1. Do we sign the tags with 'my private' key, or there are etcd-wide release credentials for this ?

We've been signing with the same personal GPG private keys that we've registered with github so that anything we sign on github with them is marked as 'verified'.

@gyuho
Copy link
Contributor

gyuho commented Feb 23, 2021

Apologies for late response! Pinned the issue for better visibility.

Can we tag the repository now - independently whether we will release 3.5 sooner or later ? [recommendation: yes]

Yes, as @jpbetz said.

Do we create branch "release-3.5" [recommendation: no; motivation in https://github.com//issues/12498#issue-752205536 ]

I don't see any major blocker other than auto learner promote? @jingyih Could you confirm or should we block?

Do the tags / commits above look good to you ?

+1 to alpha

Do we sign the tags with 'my private' key, or there are etcd-wide release credentials for this ?

Yes, you can use your own "registered" private key, but in the spirit of automated release going forward, I wouldn't mind tagging without any signature. What do you think @jpbetz? I think providing sha digests for release artifacts are good enough.

@gyuho gyuho pinned this issue Feb 23, 2021
@ptabor
Copy link
Contributor Author

ptabor commented Feb 24, 2021

I performed the 3.5.0-alpha.0 release process.

The draft of release note is here (to be published): https://github.com/etcd-io/etcd/releases/tag/untagged-58083814dada3f07f4e5
The dockers were pushed to the repos.

Sanity check:

ptab@ptab /tmp/exp1% go mod init tabor.waw.pl/my-etcd-based-code
go: creating new go.mod: module tabor.waw.pl/my-etcd-based-code

ptab@ptab /tmp/exp1% go get go.etcd.io/etcd/client/v3
go: downloading go.etcd.io/etcd/client/v3 v3.5.0-alpha.0
go: downloading go.etcd.io/etcd/api/v3 v3.5.0-alpha.0
go: downloading go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0
go get: added go.etcd.io/etcd/client/v3 v3.5.0-alpha.0

ptab@ptab /tmp/exp1% cat go.mod 
module tabor.waw.pl/my-etcd-based-code

go 1.16

require go.etcd.io/etcd/client/v3 v3.5.0-alpha.0 // indirect

PASSED

@sagikazarmark
Copy link

Thanks, I'll update my draft PRs.

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

No branches or pull requests