Giter Club home page Giter Club logo

killbill-oss-parent's Introduction

killbill-oss-parent

Maven Central

Kill Bill OSS Parent: base pom for the various Kill Bill projects.

Kill Bill compatibility

OSS parent version Kill Bill version
0.94.y 0.16.z
0.140.y 0.18.z
0.141.y 0.19.z
0.142.y 0.20.z
0.143.y 0.22.z
0.144.y 0.22.z
0.145.y 0.23.z
0.146.y 0.24.z

We've upgraded numerous dependencies in 0.144.x (required for Java 11 support).

Usage

Add Kill Bill OSS Parent as the parent to a project:

<parent>
  <groupId>org.kill-bill.billing</groupId>
  <artifactId>killbill-oss-parent</artifactId>
  <version>... release version ...</version>
</parent>

About

Kill Bill is the leading Open-Source Subscription Billing & Payments Platform. For more information about the project, go to https://killbill.io/.

killbill-oss-parent's People

Contributors

andrenpaes avatar cab avatar dependabot[bot] avatar kares avatar killbillio avatar marksimu avatar pierre avatar reshmabidikar avatar sbrossie avatar sethdaugherty avatar vijay-rsystems avatar vnandwana avatar wwjbatista avatar xsalefter avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

killbill-oss-parent's Issues

Problems building in IntelliJ IDEA 2021.1

I am currently having trouble building the Stripe plugin with IntelliJ IDEA 2021.1. As there is a .idea folder in your repositories, it looks like you are also using IntelliJ IDEA.

I have recently upgraded to IntelliJ 2021.1 and now building a project inside the IDE does not work anymore. It seems like Jetbrains changed something internally which now triggers a bug in an older version of manifold that is used in killbill-oss-parent.

Some more information can be found here: https://youtrack.jetbrains.com/issue/IDEA-266798. I don't know if Jetbrains will change anything on their side.

Upgrading manifold from 2020.1.45 to 2021.1.11 resolved the issue for me. But I only tested it to compile the Stripe plugin. I don't know if upgrading manifold will lead to problems in any of your other projects.

It would be great if you could consider upgrading manifold next time you are upgrading your dependencies.

fork airlift testing-mysql-server

This is sub-task from this: #552 . Ideally work right after #619 completed.

TBA

Details will added if needed, but TDLR: Once forked repository build successfully, some steps like in #619 would be needed.

make some release steps automatic

Currently, each Kill Bill repository has an automatic way of releasing itself (release.yml github workflow). What's time consuming is the ordering of releases that is necessary.

We're not expecting that we automate all of release process (what if there are failures in the middle or infinite loops...), but at least, for example: each time killbill-platform released, it automatically triggers a release of killbill-oss-parent with the new version of killbill-platform.

Some idea (from Pierre):

There is an event that can be triggered across repos: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#repository_dispatch So one release could trigger (in theory) the next.

We also need to update via script the version of repo X in the killbill-oss-parent workflow (ideally the new version is sent in the repository_dispatch event and passed here:

description: 'New killbill-base-plugin version'
).

.... maybe there is another way of doing it... Like doing all releases from a "central" repo, just like the ci job is doing here: https://github.com/killbill/killbill-oss-parent/blob/125da2cf399802378cf1349bbd3afc9c24503927/.github/workflows/ci.yml

When working on this, we may need run github action locally.

Update snakeyaml dependency version

The snakeyaml dependency needs to be updated to 2.0. The current version (1.33) has some vulnerabilities which is causing an issue for some customers.

Dependencies updates

Some of these are pre-requisite for Java 11 support.

Wave 1

  • Jackson to 2.11.1. Release notes
  • Guava to 29.0. Release notes. Transitive dependencies have changed, something to look at.
  • Guice to 4.2.3. Release notes. Transitive dependencies have changed (e.g. multibinding), something to look at.
  • slf4j to 1.7.30. Release notes
  • Ehcache to 3.8.x. Release notes
  • Jetty and jetty-maven-plugin to 9.4.x
  • Various Maven plugins affecting the build
  • Mockito
  • com.ning:async-http-client to org.asynchttpclient:async-http-client

Wave 2

  • HikariCP to 3.4.5. Release notes
  • MariaDB to 2.6.x. Release notes
  • Shiro to 1.6.x. Release notes. See #36
  • Jooby to 2.x See #40
  • Jooq (plugins generated code must be re-generated)
  • Snowflakes in various repos, such as commons-compress in platform and Kill Bill or flyway in Kill Bill (see #39)

Wave 3

  • Metrics to 4.1.x. See #37
  • Jersey to 2.x. This is a project (migration guide, Guice wiring must be re-done, Swagger wiring might need to be updated). Related: javax.servlet-api to 4.x (we'll tackle this separately)

Wave 4

  • Felix to 7.x. This is a project

Review maven-clean-plugin usage

We define maven-clean-plugin here. But AFAIK, we not use it anywhere. My understanding is that, to "use" that plugin, we should define it in build/plugins/plugin. So far, we just declare/define it in build/pluginManagement/plugins/plugin. I checked any other project that may use it, but I can't found any. The only project that use it is api-pojos, but this project not using this parent pom.

update postgresql test server to embedded postgres

This is a sub-task from this: #552

Since PostgreSQL update more important (needed to update jooq, also it's old already), we'll cofus with it as the first step:

Step A: Update killbill-commons

  1. Change killbill-commons to update testing-postgresql-server with embedded-postgres.
  2. Use killbill-commons local SNAPSHOT in killbill-platform and killbill
  3. Test them, once everything Ok, send PR

Step B: Update killbill-platform

  1. When killbill-commons available in sonatype, update killbill-platfrom from testing-postgresql-server to embedded-postgres.
  2. Use killbill-platform local SNAPSHOT in killbill, and test them.
  3. Use killbill-platfrom local SNAPSHOT in killbill-stripe/braintree-plugin, update jooq version, and test them.
  4. Once everything Ok, send PR

Step C: Update killbill-oss-parent

We have killbill-commons and killbill-platform with up-to-date embedded-postgres migration, so:

  1. Update killbill-oss-parent with up-to-date killbill-commons and killbill-platform, build locally.
  2. Use killbill-oss-parent local SNAPSHOT in killbill-stripe/braintree-plugin, update jooq version, and test them.
  3. Use killbill-oss-parent local SNAPSHOT in killbill, and run test, and manual test with plugins installed, if needed.
  4. Once everything Ok, send PR

Last Step

  1. Once everything Ok, send PR for killbill with up-to-date killbill-oss-parent
  2. Delete killbill-embeddeddb-postgresql in killbill-commons It's still used as test-jar dependency

update various github ci configuration

Upgrade osgi dependencies

TODO:

As part of this, remove the hacks in place:

Plans to move from airlift embedded database

Currently, we're using embedded database server for MySQL and postgreSQL. Unfortunately, those library in "public archive" state, so it is unlikely that we can even send a PR: There's case that we need to update postgreSQL version to test make sure we able to upgrade JOOQ library. Current testing-postgresql-server version doesn't support fetch ... row only statement, where JOOQ 3.15.x will use that statement.

So this leave us with:

  1. Use testcontainer. Problem is experience tell me that this is slow compared to use local/installed/embedded.
  2. Fork those embedded server library to killbill-commons.

Current plan: Lets use testcontainer in smaller project like stripe/braintree plugins. If it’s too slow/painful, maybe we just fork them.

We had this updated plan, but a comment section is not a quite right place to put a (bigger) plan, so I decided with 2 sub-tasks:

Updating Jooq to 3.14.0+ throw runtime error in MySQL

Upgrade Shiro to 2.x

Because of https://issues.apache.org/jira/browse/SHIRO-679 (duplicate classes across artifacts), we cannot upgrade until 2.0.0 is released (apache/shiro#236).

Once we've upgraded, do we still need the forked classes in Kill Bill?

Also need to remove this config:

<ignoredDependencies>

Related:

Upgrade Jooby

Jooby 2.x is a significant rewrite. The major breaking change is that there is no more Servlet support, which is a blocker for us.

Here are my notes from a quick investigation.

  1. org.jooby.Result and org.jooby.Results are gone, the new io.jooby.Context should be used instead.
@Singleton
@Path("/something")
public class SomethingResource {
    @GET
    public Result getSomething(final Optional<String> maybeSomething) {
        return Results.ok(...);
    }
}

becomes

@Singleton
@Path("/something")
public class SomethingResource {
    @GET
    public void getSomething(final Optional<String> maybeSomething, final Context context) {
        context.setResponseCode(StatusCode.OK);
    }
}
  1. Jooby#use(config) has been removed: instead, we need to create a new environment (https://jooby.io/#configuration-custom-environment). Maybe something like that (untested):
    public PluginApp build() {
        final PluginApp app = new PluginApp(jackson, services, routeClasses);
        final Environment origEnv = app.getEnvironment();
        final Environment newEnv = new Environment(origEnv.getClassLoader(),
                                                   this.config.withFallback(origEnv.getConfig()),
                                                   origEnv.getActiveNames());
        app.setEnvironment(newEnv);
        return app;
    }
  1. org.jooby.Sse has become io.jooby.ServerSentEmitter
  2. org.jooby.mvc.Local has become io.jooby.annotations.ContextParam
  3. There is no injection framework in 2.x. Guice has been replaced with a simple hash map service registry. Extra work is needed to integrate Guice again: https://jooby.io/#dependency-injection-guice

As part of the upgrade, we should add a few tests (https://jooby.io/#testing) in our base framework, to help with such upgrades in the future.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.