Skip to content

Commit 4050d9d

Browse files
committed
Merge remote-tracking branch 'origin/master' into coc-wording-updates
2 parents 374231f + 93c46a5 commit 4050d9d

17 files changed

+302
-39
lines changed

_events/2018-05-14-scaladays-berlin.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ location: Berlin, Germany
66
description: ""
77
start: 14 May 2018
88
end: 17 May 2018
9-
link-out: https://eu.scaladays.org/
9+
link-out: https://www.scaladays.org/2018/berlin
1010
---

_events/2018-06-19-scaladays-nyc.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ location: New York, NY, USA
66
description: ""
77
start: 19 June 2018
88
end: 21 June 2018
9-
link-out: https://na.scaladays.org/
9+
link-out: https://www.scaladays.org/2018/new-york
1010
---

_events/2019-06-11-scaladays-lausanne.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ location: Lausanne, Switzerland
66
description: "Scala Days 10-Year Anniversary"
77
start: 11 June 2019
88
end: 13 June 2019
9-
link-out: https://scaladays.org/
9+
link-out: https://www.scaladays.org/2019/lausanne
1010
---
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
category: event
3+
title: Scala Days Seattle
4+
logo: /resources/img/scaladays-15.png
5+
location: Seattle, WA, USA
6+
description: "Scala Days Seattle"
7+
start: 18 May 2020
8+
end: 22 May 2020
9+
link-out: https://scaladays.org/
10+
---
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
category: event
3+
title: Scala Days Berlin
4+
logo: /resources/img/scaladays-15.png
5+
location: Berlin, Germany
6+
description: "Scala Days Berlin"
7+
start: 01 July 2020
8+
end: 03 July 2020
9+
link-out: https://scaladays.org/
10+
---

_posts/2015-05-05-release-notes-2.12.0-M1.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ With the release of 2.12.0, backports to 2.11 will be dialed back.
5050
<!-- Notes from 2.11.0
5151
#### Important Changes
5252
53-
For most cases, code that compiled under 2.10.x without deprecation warnings should not be affected. We've verified this by [compiling](https://scala-ci.typesafe.com/job/scala-2.11.x-integrate-community-build/) a [sizeable number of open source projects](https://github.com/scala/community-builds/blob/2.11.x/common.conf#L20).
53+
For most cases, code that compiled under 2.10.x without deprecation warnings should not be affected. We've verified this by [compiling](https://scala-ci.typesafe.com/job/scala-2.11.x-integrate-community-build/) a [sizeable number of open source projects](https://github.com/scala/community-build/blob/2.11.x/common.conf#L20).
5454
5555
Changes to the reflection API may cause breakages...
5656

_posts/2015-12-09-schedule-update.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ Areas where participation is welcome include:
2828
- Library authors: we encourage you to publish your libraries for 2.12.0-M3 and later milestones.
2929
If you do publish, please [list your library](https://github.com/scala/make-release-notes/blob/2.12.x/projects-2.12.md).
3030
- Library authors: if (the latest version of) your library isn't included in the 2.12 community build,
31-
we have [documented](https://github.com/scala/community-builds/wiki) how to add it. We’ll be happy to help,
31+
we have [documented](https://github.com/scala/community-build/wiki) how to add it. We’ll be happy to help,
3232
as the community build is helping us catch more regressions than ever. As always, we're counting on your help with testing
33-
before we go into RC mode! (The [2.12 community build config](https://github.com/scala/community-builds/blob/2.12.x/configs/project-refs.conf) 
33+
before we go into RC mode! (The 2.12 community build config
3434
lists which version of each built project, and whether its test suite is being exercised.)
3535
- Reviewing [pull requests in the Scala repository](https://github.com/scala/scala/pulls), where 2.12.x is now the default branch.
3636
Strong motivation will be needed before we merge anything but important bug fixes to the 2.11.x branch.

_posts/2018-01-16-community-build-growth.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ In the Scala 2.13 cycle, we expect the community build to play a
5050
similar role in transitioning first our own code, then the entire
5151
open-source ecosystem, to the
5252
[new collections library](http://www.scala-lang.org/blog/2017/02/28/collections-rework.html).
53-
We've also [begun using it](https://github.com/scala/community-builds/issues/609) to
53+
We've also [begun using it](https://github.com/scala/community-build/issues/609) to
5454
gauge our progress on Java 9 support.
5555

5656
Library authors have also benefited. The community build has often
@@ -76,8 +76,7 @@ lines of code, takes care of filtering out blank lines and comments.
7676

7777
### 141 projects
7878

79-
There are now 141 projects in the community build, as listed in the
80-
[config file](https://github.com/scala/community-builds/blob/2.12.x/configs/project-refs.conf).
79+
There are now 141 projects in the community build.
8180
They are: acyclic, akka, akka-contrib-extra, akka-http,
8281
akka-http-cors, akka-http-session, akka-persistence-cassandra,
8382
algebra, ammonite, argonaut, atto, autowire, base64, better-files,
@@ -106,12 +105,12 @@ spire, spray-json, ssl-config, tut, twirl, twitter-util, twotails,
106105
unfiltered, upickle, utest, zinc.
107106

108107
Want to add your project to the community build? See our
109-
[eligibility guidelines](https://github.com/scala/community-builds/wiki/Eligibility).
108+
[eligibility guidelines](https://github.com/scala/community-build/wiki/Eligibility).
110109

111110
## Learning more, getting involved
112111

113112
The community build is documented in a
114-
[wiki](https://github.com/scala/community-builds/wiki). Many of the
113+
[wiki](https://github.com/scala/community-build/wiki). Many of the
115114
questions you might have are already answered there.
116115

117116
If you have a question or want to get involved in the community
@@ -122,12 +121,12 @@ contributors [forum](https://contributors.scala-lang.org) or
122121
Especially involved or specialized discussions about the community
123122
build can move to the community build's own
124123
[Gitter room](https://gitter.im/scala/community-builds) and
125-
[GitHub issues](https://github.com/scala/community-builds/issues).
124+
[GitHub issues](https://github.com/scala/community-build/issues).
126125

127126
## Credits
128127

129128
The main
130-
[contributors](https://github.com/scala/community-builds/graphs/contributors)
129+
[contributors](https://github.com/scala/community-build/graphs/contributors)
131130
have been myself (Seth Tisue), Adriaan Moors, Grzegorz Kossakowski,
132131
Jason Zaugg, and Toni Cunei, all of whom are current or former
133132
employees of Lightbend. Toni is also the primary author of

_posts/2019-01-18-community-build.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ scala-java-time, scala-newtype, scala-sculpt, scalajson, scalasti,
3939
scalaz8, scapegoat, scribe, scrooge-shapes, scrooge, silencer,
4040
singleton-ops, sttp, testz, wartremover.
4141

42-
See also the [full
43-
list](https://github.com/scala/community-builds/blob/2.12.x/configs/project-refs.conf)
44-
of all included projects.
42+
<!--See also the [full
43+
list](https://github.com/scala/community-build/blob/2.12.x/configs/project-refs.conf)
44+
of all included projects.-->
4545

4646
## JDK 11 added
4747

@@ -61,7 +61,7 @@ library to have any trouble _running_ on JDK 11, using published
6161
artifacts built on JDK 8. In the community build context, most
6262
failures are minor _build_ problems, not actual runtime problems.)
6363

64-
[This GitHub ticket](https://github.com/scala/community-builds/issues/796)
64+
[This GitHub ticket](https://github.com/scala/community-build/issues/796)
6565
tracks progress on getting the remaining libraries passing.
6666

6767
Project maintainers can help by adding this to their `.travis.yml`
@@ -89,14 +89,14 @@ are fundamentally sound. Most projects have needed only small changes
8989
around the edges to cross-compile against 2.11, 2.12, and 2.13.
9090

9191
[This GitHub
92-
ticket](https://github.com/scala/community-builds/issues/710) tracks
92+
ticket](https://github.com/scala/community-build/issues/710) tracks
9393
progress on getting even more libraries passing in time for the 2.13.0
9494
release in early 2019.
9595

9696
## Learning more, getting involved
9797

9898
See [last year's blog
99-
post](https://github.com/scala/community-builds/issues/796). The
99+
post](https://github.com/scala/community-build/issues/796). The
100100
links it contains are still valid.
101101

102102
And what about about Scala 3? As the Dotty team [tells us](http://dotty.epfl.ch/blog/2018/11/30/11th-dotty-milestone-release.html), "Dotty now has
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
---
2+
layout: blog-detail
3+
post-type: blog
4+
by: Alexandre Archambault, Sébastien Doeraene
5+
title: "Better management of transitive dependencies and conflicts"
6+
---
7+
8+
Early in 2019, the Scala Center advisory board accepted [a proposal from Spotify](https://github.com/scalacenter/advisoryboard/blob/master/proposals/020-sbt-transitive-dependencies-conflicts.md), whose goal is to improve the handling of conflicts in dependency management in sbt.
9+
10+
The work we've been doing may interest you if:
11+
12+
* You've run into trouble with version conflicts between dependencies and didn't know what to do or where to look for advice.
13+
* You want more control on how version conflicts are resolved in your build.
14+
* You want automated assistance with deciding whether a version upgrade might break something in your project.
15+
16+
At the time we started this project, Ivy was still used by default to resolve libraries in sbt, but efforts were in progress to use coursier instead, so we focused on the latter as a vehicle for improvements.
17+
Since then, coursier support in sbt [became official](https://github.com/sbt/sbt/pull/4614), and ships by default in sbt 1.3.0.
18+
Besides having a simpler model than the one used before in sbt or in Ivy, coursier has the advantage of being usable from the command line, and can benefit other users of the coursier API.
19+
20+
For the third point about static analysis, we found [the missinglink tool](https://github.com/spotify/missinglink) for Maven, originating from Spotify themselves.
21+
This tool can analyze the classpath of a Maven project, and detect ahead of time (at "link" time) whether binary incompatibilities can be encountered at run-time.
22+
The only issue was that it was not usable from sbt, rendering it useless for a large subset of Scala users.
23+
We built and released [an sbt plugin for missinglink](https://github.com/scalacenter/sbt-missinglink) to address this hole.
24+
25+
## Version ordering and reconciliation
26+
27+
While most people have a simple intuition about library resolution (a newer version of a library gets picked over an older version), the details of how versions are compared and reconciled are quite complicated.
28+
We contributed [a dedicated documentation page](https://get-coursier.io/docs/other-version-handling) on the coursier website to help users understand how resolution works in the not-so-trivial cases.
29+
In order to improve the experience of upgrading from sbt 1.2.x and Ivy-based resolution, we [tweaked resolution in coursier 2.0.0-RC3-4](https://github.com/coursier/coursier/pull/1348) with the help of Eugene Yokota to be more in line with Ivy, the former sbt behavior, and the [semantic versioning specification](https://semver.org).
30+
The documentation page should be updated accordingly soon.
31+
32+
On top of that, Eugene Yokota recently wrote [a blog post](http://eed3si9n.com/dependency-resolver-semantics) comparing how versions are compared and reconciled in both Ivy and coursier.
33+
34+
## Strict conflict manager
35+
36+
By default, both Ivy and coursier tolerate that the dependency graph contains two different versions of a library, in which case they pick a winner.
37+
Sometimes, we want more control, and do not want any conflict resolution to happen.
38+
Instead, we would like an error to be reported if there are two different versions of a library.
39+
A *strict* conflict manager does precisely that, and we added one to coursier.
40+
Instructions follow for enabling the strict conflict manager 1) in an sbt build, and 2) from the coursier command line.
41+
42+
### sbt
43+
44+
From sbt, enable the strict conflict manager either through the original `conflictManager` key, like
45+
46+
```scala
47+
conflictManager := ConflictManager.strict
48+
```
49+
50+
or enable it in a possibly more fine-grained way if [sbt-coursier](https://get-coursier.io/docs/sbt-coursier) is around with
51+
52+
```scala
53+
versionReconciliation += "*" % "*" % "strict"
54+
```
55+
56+
(Note that to use sbt-coursier from an sbt 1.3.x project, the [coursier-based sbt launcher](https://github.com/coursier/sbt-launcher) is required.
57+
Get it via its [custom sbt-extras runner](https://github.com/coursier/sbt-extras/blob/master/sbt) or generate one with `coursier bootstrap sbt-launcher && ./sbt`.)
58+
59+
The `update` task will then succeed only if the strict checks pass.
60+
If they don't, either force the versions of faulty dependencies with `dependencyOverrides`, like
61+
62+
```scala
63+
dependencyOverrides += "org.typelevel" % "cats-core_2.12" % "1.5.0"
64+
```
65+
66+
or adjust their version reconciliation, like
67+
68+
```scala
69+
versionReconciliation ++= Seq(
70+
"org.typelevel" %% "cats-core" % "relaxed", // "semver" reconciliation is also available
71+
"*" % "*" % "strict"
72+
)
73+
```
74+
75+
A number of version reconciliation types are available:
76+
77+
* `"strict"` requires all dependees to depend on the exact selected version (if they depend on an interval, the selected version only needs to be contained in it)
78+
* `"semver"` requires all dependees to depend on the same major version as the selected version (if they depend on an interval, the selected version only needs to be contained in it too)
79+
* `"default"` is the default version reconciliation in coursier, enabled in the coursier CLI or with the sbt-coursier plugin.
80+
It is described in more detail [in this page](https://get-coursier.io/docs/other-version-handling.html#reconciliation).
81+
* `"relaxed"` does not trigger any conflict.
82+
It is the default in the coursier support of sbt 1.3.x, which allows for better compatibility with former sbt versions.
83+
It ignores the lowest versions and version intervals, until they can be reconciled with the same algorithm as `"default"`.
84+
85+
Since reconciliation strategies can be set per artifact, or per organization, it becomes much easier to declaratively tell sbt, for example, that some project adheres to SemVer, and that it is fine to resolve dependencies on that specific project according to SemVer, but not others.
86+
87+
### CLI
88+
89+
From the command line, we can use the new strict conflict manager of coursier with:
90+
91+
```bash
92+
$ coursier resolve --strict \
93+
org.typelevel:cats-effect_2.12:2.0.0 \
94+
org.typelevel:cats-core_2.12:1.5.0
95+
Resolution error: Unsatisfied rule Strict(*:*): Found evicted dependencies:
96+
97+
org.typelevel:cats-core_2.12:2.0.0 (1.5.0 wanted)
98+
└─ org.typelevel:cats-core_2.12:1.5.0
99+
```
100+
101+
To ignore some strict checks, one can exclude the faulty dependency with
102+
103+
```bash
104+
$ coursier resolve \
105+
--strict-exclude 'org.typelevel:cats-core*' \
106+
org.typelevel:cats-effect_2.12:2.0.0 \
107+
org.typelevel:cats-core_2.12:1.5.0
108+
org.scala-lang:scala-library:2.12.9:default
109+
org.typelevel:cats-core_2.12:2.0.0:default
110+
org.typelevel:cats-effect_2.12:2.0.0:default
111+
org.typelevel:cats-kernel_2.12:2.0.0:default
112+
org.typelevel:cats-macros_2.12:2.0.0:default
113+
```
114+
115+
(passing `--strict-exclude` automatically enables `--strict`), or only include a subset of the dependencies in the strict checks, like
116+
117+
```bash
118+
$ coursier resolve \
119+
--strict-include 'org.scala-lang:*' \
120+
org.typelevel:cats-effect_2.12:2.0.0 \
121+
org.typelevel:cats-core_2.12:1.5.0
122+
org.scala-lang:scala-library:2.12.9:default
123+
org.typelevel:cats-core_2.12:2.0.0:default
124+
org.typelevel:cats-effect_2.12:2.0.0:default
125+
org.typelevel:cats-kernel_2.12:2.0.0:default
126+
org.typelevel:cats-macros_2.12:2.0.0:default
127+
```
128+
129+
Alternatively, forcing the version of the faulty dependency makes the strict checks ignore it:
130+
131+
```bash
132+
$ coursier resolve \
133+
--strict \
134+
--strict-exclude 'org.scala-lang:*' \
135+
--force-version org.typelevel:cats-core_2.12:1.5.0 \
136+
org.typelevel:cats-effect_2.12:2.0.0 \
137+
org.typelevel:cats-core_2.12:1.5.0
138+
org.scala-lang:scala-library:2.12.9:default
139+
org.scala-lang:scala-reflect:2.12.6:default
140+
org.typelevel:cats-core_2.12:1.5.0:default
141+
org.typelevel:cats-effect_2.12:2.0.0:default
142+
org.typelevel:cats-kernel_2.12:1.5.0:default
143+
org.typelevel:cats-macros_2.12:1.5.0:default
144+
org.typelevel:machinist_2.12:0.6.6:default
145+
```
146+
147+
## Static analysis checks
148+
149+
To leverage the power of the static analysis offered by [missinglink library](https://github.com/spotify/missinglink) in sbt projects, we have developed [sbt-missinglink](https://github.com/scalacenter/sbt-missinglink).
150+
The readme explains how to use it, but the basics are simple.
151+
152+
First, add the following line in `project/plugins.sbt`:
153+
154+
```scala
155+
addSbtPlugin("ch.epfl.scala" % "sbt-missinglink" % "0.1.0")
156+
```
157+
158+
then simply run the following task for the project you want to test:
159+
160+
```
161+
> theProject/missinglinkCheck
162+
```
163+
164+
This will check that the transitive dependencies of your project do not exhibit any binary compatibility conflict, assuming that the methods of your `Compile` configuration (in `src/main/`) are all called.
165+
You can add that task to your CI script, for example.
166+
167+
If the checks succeed, you have a guarantee that no `LinkageError` can happen at run-time, unless run-time reflection is involved, making static analysis impossible.
168+
169+
The plugin is very simple at the moment, and will be extended to support more features of `missinglink`, in particular the ability to add exclusions to the checks performed.
170+
If `missinglink` itself proves insufficient for the needs of Scala developers, we may also contribute improvements to it in the future.
171+
172+
## Conclusion
173+
174+
We have seen a few new ways you can improve the management of your transitive dependencies.
175+
In particular, we have introduced:
176+
177+
* *reconciliation* strategies, which let you declaratively specify the compatibility guarantees of individual libraries, allowing coursier to do a better, safer job at conflict resolution, and
178+
* `sbt-missinglink`, an sbt plugin to easily check *ahead of time* that your resolved transitive dependencies are actually binary compatible.

blog/_posts/2018-06-15-bsp.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ let's discuss ways we can work together.
213213
[Pants]: https://pantsbuild.org
214214
[mill]: https://lihaoyi.com/mill
215215
[langservers]: http://langserver.org
216-
[LSP]: https://microsoft.github.io/language-server-protocol/specification
216+
[LSP]: https://microsoft.github.io/language-server-protocol/
217217
[JetBrains]: https://www.jetbrains.com/
218218
[IntelliJ IDEA]: https://www.jetbrains.com/idea/
219219
[jastice]: https://github.com/jastice

0 commit comments

Comments
 (0)