Release Issue Template
go-ipfs 0.7.0 Release
We're happy to announce go-ipfs v0.7.0, it has a number of user facing changes so if you're wondering what happened to SECIO or why you're starting to see more peers with peerIDs that don't start with Qm checkout the highlights.
🗺 What's left for release
- [x] Switch to ed25519 keys by default https://github.com/ipfs/go-ipfs/issues/6916
- [x] Disabled Secio by default https://github.com/ipfs/go-ipfs/issues/7530
- [x] Enable Noise/TLS on the public relays.
- [x] Update libp2p daemon deps: https://github.com/libp2p/go-libp2p-daemon/pull/233
- [x] Switch to noise+TLS in the go-libp2p-daemon.
- [x] Upgrade the relays themselves.
🚢 Estimated shipping date
~ Sept 22, 2020
🔦 Highlights
🔒 Secio is now disabled by default
As part of deprecating and removing support for the Secio security transport, we have disabled it by default. TLS1.3 will remain the default security transport with fallback to Noise. You can read more about the deprecation in the blog post, https://blog.ipfs.io/2020-08-07-deprecating-secio/. If you're running IPFS older than 0.5, this may start to impact your performance on the public network.
🗝️ Ed25519 keys are now used by default
Previously go-ipfs generated 2048 bit RSA keys for new nodes, but it will now use ed25519 keys by default. This will not affect any existing keys, but newly created keys will be ed25519 by default. The main benefit of using ed25519 keys over RSA is that ed25519 keys have an inline public key. This means that someone only needs your PeerId to verify things you've signed, which means we don't have to worry about storing those bulky RSA public keys.
Rotating keys
Along with switching the default, we've added support for rotating keys. If you would like to change the key type of your IPFS node, you can now do so with the rotate command. NOTE: This will affect your Peer Id, so be sure you want to do this! Your existing identity key will be backed up in the Keystore.
ipfs key rotate -o my-old-key -t ed25519
📦 Key export/import
We've added commands to allow you to export and import keys from the IPFS Keystore to a local .key file. This does not apply to the IPFS identity key, self.
ipfs key gen mykey
ipfs key export -o mykey.key mykey # ./<name>.key is the default path
ipfs key import mykey mykey.key # on another node
#️⃣ IPNS paths now encode the key name as a base36 CIDv1 by default
Previously go-ipfs encoded the key names for IPNS paths as base58btc multihashes (e.g. Qmabc...). We now encode them as base36 encoded CIDv1s as defined in the peerID spec (e.g. k51xyz...) which also deals with encoding of public keys. This is nice because it means that IPNS keys will by default be case-insensitive and that they will fit into DNS labels (e.g. k51xyz...ipns.localhost) and therefore that subdomain gateway redirections (e.g. from localhost:8080/ipns/{key} to {key}.ipns.localhost) will look better to users in the default case.
Many commands will accept a --ipns-base option that allows changing command outputs to use a particular encoding (i.e. base58btc multihash, or CIDv1 encoded in any supported base)
📮 Multiaddresses now accept PeerIDs encoded as CIDv1
In preparation for eventually changing the default PeerID representation multiaddresses can now contain strings like /p2p/k51xyz... in addition to the default /p2p/Qmabc.... There is a corresponding --peerid-base option to many functions that output peerIDs.
🧮 dag stat
Initial support has been added for the ipfs dag stat command. Running this command will traverse the DAG for the given root CID and report statistics. By default, progress will be shown as the DAG is traversed. Supported statistics currently include DAG size and number of blocks.
ipfs dag stat bafybeihpetclqvwb4qnmumvcn7nh4pxrtugrlpw4jgjpqicdxsv7opdm6e # the IPFS webui
Size: 30362191, NumBlocks: 346
🔌 Plugin build changes 🚨
We have changed the build flags used by the official binary distributions on dist.ipfs.io (or /ipns/dist.ipfs.io) to use the simpler and more reliable -trimpath flag instead of the more complicated and brittle -asmflags=all=-trimpath="$(GOPATH)" -gcflags=all=-trimpath="$(GOPATH)" flags, however the build flags used by default in go-ipfs remain the same.
The scripts in https://github.com/ipfs/go-ipfs-example-plugin have been updated to reflect this change. This is a breaking change to how people have been building plugins against the dist.ipfs.io binary of go-ipfs and plugins should update their build processes accordingly see ipfs/go-ipfs-example-plugin#9 for details.
Changelog
Full Changelog
- github.com/ipfs/go-ipfs:
- github.com/ipfs/go-bitswap (v0.2.19 -> v0.2.20):
- github.com/ipfs/go-cid (v0.0.6 -> v0.0.7):
- github.com/ipfs/go-datastore (v0.4.4 -> v0.4.5):
- github.com/ipfs/go-ds-flatfs (v0.4.4 -> v0.4.5):
- github.com/ipfs/go-fs-lock (v0.0.5 -> v0.0.6):
- github.com/ipfs/go-graphsync (v0.0.5 -> v0.1.1):
- github.com/ipfs/go-ipfs-cmds (v0.2.9 -> v0.4.0):
- github.com/ipfs/go-ipfs-config (v0.8.0 -> v0.9.0):
- github.com/ipfs/go-log/v2 (v2.0.8 -> v2.1.1):
failed to fetch repo
- github.com/ipfs/go-path (v0.0.7 -> v0.0.8):
- ResolveToLastNode no longer fetches nodes it does not need (ipfs/go-path#30)
- doc: add a lead maintainer
- github.com/ipfs/interface-go-ipfs-core (v0.3.0 -> v0.4.0):
- github.com/ipld/go-car (v0.1.0 -> v0.1.1-0.20200429200904-c222d793c339):
- github.com/ipld/go-ipld-prime (v0.0.2-0.20191108012745-28a82f04c785 -> v0.0.2-0.20200428162820-8b59dc292b8e):
- Add two basic examples of usage, as go tests.
- Fix marshalling error (ipld/go-ipld-prime#53)
- Add more test specs for list and map nesting.
- traversal.SkipMe feature (ipld/go-ipld-prime#51)
- Improvements to traversal docs.
- Drop code coverage bot config. (ipld/go-ipld-prime#50)
- Promote NodeAssembler/NodeStyle interface rework to core, and use improved basicnode implementation. (ipld/go-ipld-prime#49)
- Merge branch 'traversal-benchmarks'
- Merge branch 'cycle-breaking-and-traversal-benchmarks'
- Merge branch 'assembler-upgrade-to-codecs'
- Path clarifications (ipld/go-ipld-prime#47)
- Merge branch 'research-admissions'
- Add a typed link node to allow traversal with code gen'd builders across links (ipld/go-ipld-prime#41)
- Merge branch 'research-admissions'
- Library updates.
- Feat/add code gen disclaimer (ipld/go-ipld-prime#39)
- Readme and key Node interface docs improvements.
- fix(schema/gen): return value not reference (ipld/go-ipld-prime#38)
- github.com/ipld/go-ipld-prime-proto (v0.0.0-20191113031812-e32bd156a1e5 -> v0.0.0-20200428191222-c1ffdadc01e1):
- github.com/libp2p/go-libp2p (v0.9.6 -> v0.11.0):
- github.com/libp2p/go-libp2p-asn-util (null -> v0.0.0-20200825225859-85005c6cf052):
- chore: go fmt
- feat: use deferred initialization of the asnStore (libp2p/go-libp2p-asn-util#3)
- chore: switch to forked cidranger
- fixed code
- library for ASN mappings
- github.com/libp2p/go-libp2p-autonat (v0.2.3 -> v0.3.2):
- github.com/libp2p/go-libp2p-blankhost (v0.1.6 -> v0.2.0):
- github.com/libp2p/go-libp2p-circuit (v0.2.3 -> v0.3.1):
- github.com/libp2p/go-libp2p-core (v0.5.7 -> v0.6.1):
- github.com/libp2p/go-libp2p-discovery (v0.4.0 -> v0.5.0):
- github.com/libp2p/go-libp2p-kad-dht (v0.8.2 -> v0.9.0):
- github.com/libp2p/go-libp2p-kbucket (v0.4.2 -> v0.4.7):
- github.com/libp2p/go-libp2p-pubsub (v0.3.1 -> v0.3.5):
- regenerate protobufs (#381) (libp2p/go-libp2p-pubsub#381)
- track validation time
- fullfill promise as soon as a message begins validation
- don't apply penalty in self origin rejections
- add behaviour penalty threshold
- Add String() method to Topic.
- add regression test for issue 371
- don't add direct peers to fanout
- reference spec change in comment.
- fix backoff slack time
- use the heartbeat interval for slack time
- add slack time to prune backoff clearance
- fix: call the correct tracer function in FloodSubRouter.Leave (#373) (libp2p/go-libp2p-pubsub#373)
- downgrade trace buffer overflow log to debug
- track topics in Reject/Duplicate/Deliver events
- add topics to Reject/Duplicate/Deliver events
- fix flaky test
- refactor ip colocation factor computation that is common for score and inspection
- better handling of intermediate topic score snapshots
- disallow duplicate score inspectors
- make peer score inspect function types aliases
- extended peer score inspection
- upgrade deps + interoperable uvarint delimited writer/reader.
- Add warning about messageIDs
- Signing policy + optional Signature, From and Seqno (libp2p/go-libp2p-pubsub#359)
- Update pubsub.go
- Define a public error ErrSubscriptionCancelled.
- only do PX on leave if PX was enabled in the node
- drop warning about failure to open stream to a debug log
- reinstate tagging (now protection) tests
- disable tests for direct/mesh tags, we don't have an interface to query the connman yet
- protect direct and mesh peers in the connection manager
- feat: add direct connect ticks option
- github.com/libp2p/go-libp2p-pubsub-router (v0.3.0 -> v0.3.2):
- github.com/libp2p/go-libp2p-quic-transport (v0.6.0 -> v0.8.0):
- github.com/libp2p/go-libp2p-swarm (v0.2.6 -> v0.2.8):
- github.com/libp2p/go-libp2p-testing (v0.1.1 -> v0.2.0):
- github.com/libp2p/go-maddr-filter (v0.0.5 -> v0.1.0):
- github.com/libp2p/go-msgio (v0.0.4 -> v0.0.6):
- github.com/libp2p/go-netroute (v0.1.2 -> v0.1.3):
- github.com/libp2p/go-openssl (v0.0.5 -> v0.0.7):
- github.com/libp2p/go-reuseport (v0.0.1 -> v0.0.2):
- Fix build on Plan 9 (libp2p/go-reuseport#79)
- farewell gx; thanks for serving us well.
- update readme badges
- remove Jenkinsfile.
- github.com/libp2p/go-reuseport-transport (v0.0.3 -> v0.0.4):
- Update go-netroute and go-reuseport for Plan 9 support
- Fix build on Plan 9
- github.com/lucas-clemente/quic-go (v0.16.2 -> v0.18.0):
- github.com/marten-seemann/qpack (v0.1.0 -> v0.2.0):
- github.com/marten-seemann/qtls (v0.9.1 -> v0.10.0):
- add callbacks to store and restore app data along a session state
- remove support for Go 1.13
- github.com/marten-seemann/qtls-go1-15 (null -> v0.1.0):
- use a prefix for client session cache keys
- add callbacks to store and restore app data along a session state
- don't use TLS 1.3 compatibility mode when using alternative record layer
- delete the session ticket after attempting 0-RTT
- reject 0-RTT when a different ALPN is chosen
- encode the ALPN into the session ticket
- add a field to the ConnectionState to tell if 0-RTT was used
- add a callback to tell the client about rejection of 0-RTT
- don't offer 0-RTT after a HelloRetryRequest
- add Accept0RTT to Config callback to decide if 0-RTT should be accepted
- add the option to encode application data into the session ticket
- export the 0-RTT write key
- abuse the nonce field of ClientSessionState to save max_early_data_size
- export the 0-RTT read key
- close connection if client attempts 0-RTT, but ticket didn't allow it
- encode the max early data size into the session ticket
- implement parsing of the early_data extension in the EncryptedExtensions
- add a tls.Config.MaxEarlyData option to enable 0-RTT
- accept TLS 1.3 cipher suites in Config.CipherSuites
- introduce a function on the connection to generate a session ticket
- add a config option to enforce selection of an application protocol
- export Conn.HandlePostHandshakeMessage
- export Alert
- reject Configs that set MaxVersion < 1.3 when using a record layer
- enforce TLS 1.3 when using an alternative record layer
- github.com/multiformats/go-multiaddr (v0.2.2 -> v0.3.1):
- github.com/multiformats/go-multiaddr-net (v0.1.5 -> v0.2.0):
- github.com/multiformats/go-multihash (v0.0.13 -> v0.0.14):
- github.com/multiformats/go-multistream (v0.1.1 -> v0.1.2):
- github.com/multiformats/go-varint (v0.0.5 -> v0.0.6):
- github.com/warpfork/go-wish (v0.0.0-20190328234359-8b3e70f8e830 -> v0.0.0-20200122115046-b9ea61034e4a):
- Add ShouldBeSameTypeAs checker.
- Integration test update for go versions.
- github.com/whyrusleeping/cbor-gen (v0.0.0-20200123233031-1cdf64d27158 -> v0.0.0-20200402171437-3d27c146c105):
✅ Release Checklist
For each RC published in each stage:
- version string in
version.go has been updated (in the release-vX.Y.Z branch).
- tag commit with
vX.Y.Z-rcN
- upload to dist.ipfs.io
- Build: https://github.com/ipfs/distributions#usage.
- Pin the resulting release.
- Make a PR against ipfs/distributions with the updated versions, including the new hash in the PR comment.
- Ask the infra team to update the DNSLink record for dist.ipfs.io to point to the new distribution.
- cut a pre-release on github and upload the result of the ipfs/distributions build in the previous step.
- Announce the RC:
Checklist:
- [x] Stage 0 - Automated Testing
- [x] Fork a new branch (
release-vX.Y.Z) from master and make any further release related changes to this branch. If any "non-trivial" changes (see the footnotes of docs/releases.md for a definition) get added to the release, uncheck all the checkboxes and return to this stage.
- [x] Follow the RC release process to cut the first RC.
- [x] Bump the version in
version.go in the master branch to vX.(Y+1).0-dev.
- [x] Automated Testing (already tested in CI) - Ensure that all tests are passing, this includes:
- [x] unit, sharness, cross-build, etc (
make test)
- [x] lint (
make test_go_lint)
- [x] [interop](https://github.com/ipfs/interop#test-with-a-non-yet-released-version-of-go-ipfs)
- [x] [go-ipfs-api](https://github.com/ipfs/go-ipfs-api)
- [x] [go-ipfs-http-client](https://github.com/ipfs/go-ipfs-http-client)
- [x] [WebUI](https://github.com/ipfs-shipyard/ipfs-webui)
- [x] Stage 1 - Internal Testing
- [x] CHANGELOG.md has been updated
- use
./bin/mkreleaselog to generate a nice starter list
- [ ] Network Testing:
- [ ] test lab things - TBD
- [x] Infrastructure Testing:
- [x] Deploy new version to a subset of Bootstrappers
- [x] Deploy new version to a subset of Gateways
- [x] Deploy new version to a subset of Preload nodes
- [x] Collect metrics every day. Work with the Infrastructure team to learn of any hiccup
- [ ] IPFS Application Testing - Run the tests of the following applications:
- [x] [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) - @hacdias
- [x] [IPFS Companion](https://github.com/ipfs-shipyard/ipfs-companion) - @lidel
- [ ] [NPM on IPFS](https://github.com/ipfs-shipyard/npm-on-ipfs) - @achingbrain
- [x] Stage 2 - Community Dev Testing
- [x] Reach out to the IPFS _early testers_ listed in docs/EARLY_TESTERS.md for testing this release (check when no more problems have been reported). If you'd like to be added to this list, please file a PR.
- [x] Reach out to on IRC for beta testers.
- [x] Run tests available in the following repos with the latest beta (check when all tests pass):
- [x] [orbit-db](https://github.com/orbitdb/orbit-db)
- [x] Stage 3 - Community Prod Testing
- [ ] Documentation
- [x] Ensure that CHANGELOG.md is up to date
- [x] Ensure that README.md is up to date
- [x] Ensure that all the examples we have produced for go-ipfs run without problems
- [x] Update HTTP-API Documentation on the Website using https://github.com/ipfs/http-api-docs
- [x] Invite the IPFS _early testers_ to deploy the release to part of their production infrastructure.
- [x] Invite the wider community through (link to the release issue):
- [x] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements)
- [x] Twitter
- [x] IRC
- [ ] Stage 4 - Release
- [ ] Final preparation
- [x] Verify that version string in
version.go has been updated.
- [x] Merge
release-vX.Y.Z into the release branch.
- [x] Tag this merge commit (on the
release branch) with vX.Y.Z.
- [ ] Release published
- [ ] Cut a new ipfs-desktop release
- [X] Publish a Release Blog post https://blog.ipfs.io/2020-09-24-go-ipfs-0-7-0/
- [X] Broadcasting (link to blog post)
- [X] Twitter
- [X] IRC
- [X] [Reddit](https://reddit.com/r/ipfs)
- [X] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements)
- [X] Announce it on the IPFS Users Mailing List
- [ ] Post-Release
- [ ] Merge the
release branch back into master, ignoring the changes to version.go (keep the -dev version from master).
- [ ] Create an issue using this release issue template for the _next_ release.
- [ ] Make sure any last-minute changelog updates from the blog post make it back into the CHANGELOG.
❤️ Contributors
| Contributor | Commits | Lines ± | Files Changed |
|-------------|---------|---------|---------------|
| Marten Seemann | 156 | +16428/-42621 | 979 |
| hannahhoward | 42 | +15132/-9819 | 467 |
| Eric Myhre | 114 | +13709/-6898 | 586 |
| Steven Allen | 55 | +1211/-2714 | 95 |
| Adin Schmahmann | 54 | +1660/-783 | 117 |
| Petar Maymounkov | 23 | +1677/-671 | 75 |
| Aarsh Shah | 10 | +1926/-341 | 39 |
| Raúl Kripalani | 17 | +1134/-537 | 53 |
| Will | 1 | +841/-0 | 9 |
| rendaw | 3 | +425/-195 | 12 |
| Will Scott | 8 | +302/-229 | 15 |
| vyzo | 22 | +345/-166 | 23 |
| Fazlul Shahriar | 7 | +452/-44 | 19 |
| Peter Rabbitson | 1 | +353/-118 | 5 |
| Hector Sanjuan | 10 | +451/-3 | 14 |
| Marcin Rataj | 9 | +298/-106 | 16 |
| Łukasz Magiera | 4 | +329/-51 | 12 |
| RubenKelevra | 9 | +331/-7 | 12 |
| Michael Muré | 2 | +259/-69 | 6 |
| jstordeur | 1 | +252/-2 | 5 |
| Diederik Loerakker | 1 | +168/-35 | 7 |
| Tiger | 3 | +138/-52 | 8 |
| Kevin Neaton | 3 | +103/-21 | 9 |
| Rod Vagg | 1 | +50/-40 | 4 |
| Oli Evans | 4 | +60/-9 | 6 |
| achingbrain | 4 | +30/-30 | 5 |
| Cyril Fougeray | 2 | +34/-24 | 2 |
| Luke Tucker | 1 | +31/-1 | 2 |
| sandman | 2 | +23/-7 | 3 |
| Alan Shaw | 1 | +18/-9 | 2 |
| Jacob Heun | 4 | +13/-3 | 4 |
| Jessica Schilling | 3 | +7/-7 | 3 |
| Rafael Ramalho | 4 | +9/-4 | 4 |
| Jeromy Johnson | 2 | +6/-6 | 4 |
| Nick Cabatoff | 1 | +7/-2 | 1 |
| Stephen Solka | 1 | +1/-7 | 1 |
| Preston Van Loon | 2 | +6/-2 | 2 |
| Jakub Sztandera | 2 | +5/-2 | 2 |
| llx | 1 | +3/-3 | 1 |
| Adrian Lanzafame | 1 | +3/-3 | 1 |
| Yusef Napora | 1 | +3/-2 | 1 |
| Louis Thibault | 1 | +5/-0 | 1 |
| Martín Triay | 1 | +4/-0 | 1 |
| Hlib | 1 | +2/-2 | 1 |
| Shotaro Yamada | 1 | +2/-1 | 1 |
| phuslu | 1 | +1/-1 | 1 |
| Zero King | 1 | +1/-1 | 1 |
| Rüdiger Klaehn | 1 | +2/-0 | 1 |
| Nex | 1 | +1/-1 | 1 |
| Mark Gaiser | 1 | +1/-1 | 1 |
| Luflosi | 1 | +1/-1 | 1 |
| David Florness | 1 | +1/-1 | 1 |
| Dean Eigenmann | 1 | +0/-1 | 1 |
Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:
- Check the issues with the
help wanted label in the go-ipfs repo
- Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands
- Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built
- Join the discussion at discuss.ipfs.io and help users finding their answers.
- Join the 🚀 IPFS Core Implementations Weekly Sync 🛰 and be part of the action!
⁉️ Do you have questions?
The best place to ask your questions about IPFS, how it works and what you can do with it is at discuss.ipfs.io. We are also available at the #ipfs channel on Freenode, which is also accessible through our Matrix bridge.
Most helpful comment
https://hub.docker.com/r/ipfs/go-ipfs/tags/?page=1&name=v0.7 is go! rc1 is in the hub.