Releases: curioswitch/curiostack
curiostack-0.1.1
Bug fixes
- Fix crash when updating IntelliJ config due to switch to zulu
@curiostack/base-web-0.1.0
This is the first release of @curiostack/base-web 0.X.Y. To celebrate, let's review some of its features.
Notable Features
Initial versions of this framework were directly inspired by react-boilerplate. It's a great framework and base-web attempts to have similar features without keeping the boilerplate code in the user's repository.
- Least amount of boilerplate for developing a React web client with best practices inspired by react-boilerplate. Even package.json scripts don't need to be set. Version upgrades will apply naturally as there is no boilerplate in user code to keep in sync
- A webpack loader and react component for fully responsive images. Specify viewport widths for images and a variety of sizes will be automatically generated and served using a
picture
tag to give the best user experience - A fallback module resolver to reduce dependency problems in monorepos. Both webpack and normal node invocations (like jest) will respect the fallback definitions, and unlike other solutions that only allow defining a single alias, the fallback resolver can check a list of them in order (used to work around core-js 3 / 2 dependency conflicts)
- Any site can be prerendered using a simple configuration of routes and globals.
Breaking changes
styled-components-ts
dependency is not listed anymore. If you still usestyled-components-ts
, you can add it into your own package.json, but it's highly recommended to migrate tostyled-components
official typescript bindings which work out of the box- Significant prettier whitespace changes. You will probably want to run
:yarn_run_fix
first after upgrading before trying to build projects.
Bug fixes
- The
fix
script (i.e.,./gradlew :yarn_run_fix
) did not actually output fixes
@curiostack/base-web-0.0.52
Bug Fixes
- Fixes issue where resolution overrides did not work with top-level module imports
curiostack-0.1.0
Curiostack 0.1.0 is the first version to be published on the Gradle Plugin Portal. To celebrate, let's review some of its features.
Notable Features
-
Only dependency is bash. It is possible to for any Curiostack repository to be built with no extra setup on Linux and Mac OS X. Windows also works after install Git (which comes with bash) or MSYS64 (an even better Windows bash). Even native binaries, such as cgo binaries, can be built without extra setup.
-
Automatic configuration of IntelliJ. All that is required to onboard a new developer is a single command
./gradlew setup
-
Tools, like terraform, compilers, and such, are all downloaded automatically. Even OpenJDK used for building is. There is no effort in keeping a team's tool versions up to sync since the build manages it.
-
Monorepo-aware continuous build support. Curiostack builds will only build projects that were changed, allowing large monorepos to still have reasonable build time.
-
Tightly integrated server framework. All servers are automatically built, pushed to docker registry, and deployed to Kubernetes as part of the continuous build. There is almost no boilerplate in defining a gRPC-based server and client. Server framework by default follows best practices, such as zero-trust, TLS-only, and observability.
-
The ability to easily deploy static sites to app engine and firebase, along with support for building codelabs along the way.
-
A suite of Armeria-based libraries for accessing GCP. Users that deal with large payloads will benefit from
armeria-google-cloud-storage
andarmeria-google-cloud-pubsub
which support operating on payloads without copying to the heap. -
Continuous build run on Linux, Windows, and Mac (if you need this, you may want to check out our workflow
Breaking Changes
Settings Plugin
Curiostack plugin takes advantage of new features in Gradle 6.0 and has migrated to being a settings plugin instead of a project plugin. This means it should be applied to your top level settings.gradle
and removed from build.gradle
. Previous build cache configuration is handled by the plugin now, and plugin management is not needed anymore. Your settings.gradle.kts should look something like
plugins {
id("org.curioswitch.gradle-curiostack-plugin").version("0.1.0")
}
configure<CuriostackExtension> {
buildCacheBucket.set("curioswitch-gradle-build-cache")
}
-
Gradle 6 + OpenJDK 13 require IntelliJ 2019.3 (currently BETA) to work with
-
The gRPC plugin's extension has been modernized to use Gradle's
Property
. This should only affect web projects. In web projects, switch from e.g.,web = true
toweb.set(true)
. -
Previously deprecated
curio-static-site-plugin
has been removed, rename tostatic-site-plugin
Reference from a plugins
block in build.gradle
must be removed.
New Features
-
Mac OS SDK is now automatically downloaded. Native builds, like cgo, will run correctly without any user action on a fresh Mac OS installation.
-
Conda, previously disabled on Windows, is used on Windows. Native builds work correctly on Windows too without any user action.
Dependencies
Notable dependency updates are Gradle 5.X -> 6.0 and JDK 12.x -> 13. While migrating JDK, we also migrated from AdoptOpenJDK to Zulu JDK because the latter downloads much faster.
@curiostack/base-web-0.0.51
Bug Fixes
- Fixes core-js resolution workaround to apply to webpack in addition to normal nodejs (e.g., jest)
New features
- Module resolution can be overridden by setting
curiostack.resolveOverrides
inpackage.json
{
"curiostack": {
"resolveOverrides": {
"redux-saga": ["redux-saga-old"]
}
},
"dependencies": {
"redux-saga-old": "npm:redux-saga:0.0.1"
}
}
This allows you to use yarn's npm aliases to have multiple versions of the same library in node_modules
. Having multiple entries will check them in order (useful for working around issues like the core-js API breakage) but it's more normal to have a single entry pointing to a desired version for a project (e.g., old redux-saga
for use with react-admin
). This should generally work with less issues than nohoist
.
curiostack-0.0.187
Breaking Changes
Mockito
Mockito has been updated to 3.x and its Junit5 extension is automatically enabled. This means it follows the new default mockito behavior of using STRICT_STUBS
. With strict stubs, the pattern of using when
in a @BeforeEach
method and verify
in a test does not work anymore, mockito requires all declarations of when
to match a call - in exchange, there is no need to verify calls anymore since mockito automatically does.
Before
@BeforeEach() void setUp() {
when(foo).bar(any()).thenReturn("cat");
}
@Test void test() {
assertThat(foo.bar("dog")).isEqualTo("cat");
verify(foo).bar("dog");
}
After
@Test void test() {
when(foo.bar("dog")).thenReturn("cat");
assertThat(foo.bar("dog")).isEqualTo("cat");
// No need to verify
}
Migrating all tests is very tedious, but due to the way Junit5 automatic extensions work there isn't a good way of making this configurable. To opt-out of STRICT_STUBS
, add @MockitoSettings(strictness = LENIENT)
to your test class. You should probably start by adding this to all your test classes using IntelliJ's structural replace functionality.
Armeria
verboseExceptions
replaced withverboseExceptionsSpec
- line/armeria#2111
Deprecations
new *Builder()
pattern replaced in Armeria with*.builder()
. e.g.,new GrpcServiceBuilder()
->GrpcService.builder()
.
New features
- It is now possible to exclude packages from
checkNodeResolutions
. If you currently disablecheckNodeResolutions
to manually manage a package, it is strongly encouraged to reenable it and exclude instead.
nodeSetup {
excludes.add("redux")
}
- Default server base image upgraded to Java 13. Base image can be controlled using
server.baseImage
property.
Bugfixes
- Task download cache not enabled when Gradle cache is not enabled
@curiostack/base-web-0.0.50
New Features
-
core-js
dependency conflicts between v3 and v2 are handled within base-web scripts now. You should make sure to includecore-js
resolutions in the top-levelpackage.json
with this release. -
Favicons are injected into non-prerendered HTML
Breaking Changes
-
react/jsx-props-no-spreading
is currently on due to an update to the react eslint config. This seems to hurt more than help and will be disabled in a future version. It is recommended to disable this rule in your local eslint config. -
react-intl
major version introduces some API breakages. In particular, you will need to replace all usages ofInjectedIntlProps
withWrappedComponentProps
. You may also consider instead to migrate to hooks instead. -
react-helmet
types does not provide a default export - if you have any instances ofimport Helmet from 'react-helmet'
, they need to be replaced withimport { Helmet } from 'react-helmet'
-
Jest has been upgrade to v24. Newer jest is known to cause issues with
ts-jest
- if your tests suffer strange failures with the upgrade, you may need to fix to the previous version in your top-levelpackage.json
Cleanup
- Remove legacy, unused tslint configs
curiostack-0.0.186
This release contains several HTTP/2-related security fixes. It is recommended to upgrade as soon as possible. For more details, see https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-002.md
New Features
- It is now possible to specify dependencies between terraform projects. Contents of dependency terraform projects will be copied in from the
build/terraform
directory of that project.
terraform {
dependency(":path:to:other:project")
}
Bugfixes
- Fix an issue where terraform plugin wouldn't setup terraform correctly when applied to the root project
Dependencies
BOM files for Jackson, Google Cloud, Armeria, Dropwizard Metrics, gRPC, Netty, Apache Beam, log4j2, junit are now used instead of specifying versions for individual dependencies. This means that where previously only a hand-picked set of dependencies were managed for each of these projects, now all are.
- jackson 2.9.9 -> 2.9.9.20190807
- google-cloud (not bom) -> 0.105.0-alpha
- armeria 0.87 -> 0.90.3
- gRPC 1.21 -> 1.23
- Netty 4.1.34 -> 4.1.39
- Apache beam 2.10.0 -> 2.14.0
- log4j 2.11.2 -> 2.12.1
- junit5 5.3.0 -> 5.5.1
- protobuf 2.8.0 -> 2.9.1
And other miscellaneous dependencies
@curiostack/base-web-0.0.49
Bugfixes
- Fixes all non-/ URLs get redirected to /
@curiostack/base-web-0.0.48
Bugfixes
Fixes incorrect type definition for action creator.