Sage-Bionetworks / sage-monorepo

Where OpenChallenges, Schematic, and other Sage open source apps are built
https://sage-bionetworks.github.io/sage-monorepo/
Apache License 2.0
23 stars 12 forks source link

Set `renovate` configuration #778

Closed tschaffter closed 1 year ago

tschaffter commented 1 year ago

The default configuration in renovate.json is:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ]
}

The goal is to review this configuration and corresponding onboarding PR opened by Renovate (#777).

References

tschaffter commented 1 year ago

Detected Package Files

Initial detection:

apps/challenge-api-gateway/docker-compose.yml (docker-compose)
apps/challenge-auth-service/docker-compose.yml (docker-compose)
apps/challenge-config-service/docker-compose.yml (docker-compose)
apps/challenge-core-service/docker-compose.yml (docker-compose)
apps/challenge-elk/elasticsearch/docker-compose.yml (docker-compose)
apps/challenge-elk/kibana/docker-compose.yml (docker-compose)
apps/challenge-elk/logspout/docker-compose.yml (docker-compose)
apps/challenge-elk/logstash/docker-compose.yml (docker-compose)
apps/challenge-keycloak/docker-compose.yml (docker-compose)
apps/challenge-mariadb/docker-compose.yml (docker-compose)
apps/challenge-mongodb/docker-compose.yml (docker-compose)
apps/challenge-postgresql/docker-compose.yml (docker-compose)
apps/challenge-service-registry/docker-compose.yml (docker-compose)
apps/challenge-user-service/docker-compose.yml (docker-compose)
docker-compose.yml (docker-compose)
apps/api/Dockerfile (dockerfile)
apps/challenge-bot/Dockerfile (dockerfile)
apps/challenge-elk/elasticsearch/Dockerfile (dockerfile)
apps/challenge-elk/extensions/apm-server/Dockerfile (dockerfile)
apps/challenge-elk/extensions/curator/Dockerfile (dockerfile)
apps/challenge-elk/extensions/enterprise-search/Dockerfile (dockerfile)
apps/challenge-elk/extensions/filebeat/Dockerfile (dockerfile)
apps/challenge-elk/extensions/heartbeat/Dockerfile (dockerfile)
apps/challenge-elk/extensions/logspout/Dockerfile (dockerfile)
apps/challenge-elk/extensions/metricbeat/Dockerfile (dockerfile)
apps/challenge-elk/kibana/Dockerfile (dockerfile)
apps/challenge-elk/logspout/Dockerfile (dockerfile)
apps/challenge-elk/logstash/Dockerfile (dockerfile)
apps/challenge-elk/setup/Dockerfile (dockerfile)
apps/challenge-keycloak/Dockerfile (dockerfile)
apps/challenge-mariadb/Dockerfile (dockerfile)
apps/challenge-mongodb/Dockerfile (dockerfile)
apps/challenge-postgresql/Dockerfile (dockerfile)
apps/challenge-registry/Dockerfile (dockerfile)
tools/devcontainers/challenge-devcontainer/.devcontainer/Dockerfile (dockerfile)
.github/workflows/build-devcontainer-image.yml (github-actions)
.github/workflows/ci.yml (github-actions)
.github/workflows/lint-pr.yml (github-actions)
.github/workflows/svgo.yml (github-actions)
apps/challenge-api-gateway/gradle.properties (gradle)
apps/challenge-api-gateway/settings.gradle (gradle)
apps/challenge-api-gateway/build.gradle (gradle)
apps/challenge-auth-service/gradle.properties (gradle)
apps/challenge-auth-service/settings.gradle (gradle)
apps/challenge-auth-service/build.gradle (gradle)
apps/challenge-config-service/gradle.properties (gradle)
apps/challenge-config-service/settings.gradle (gradle)
apps/challenge-config-service/build.gradle (gradle)
apps/challenge-core-service/gradle.properties (gradle)
apps/challenge-core-service/settings.gradle (gradle)
apps/challenge-core-service/build.gradle (gradle)
apps/challenge-service-registry/gradle.properties (gradle)
apps/challenge-service-registry/settings.gradle (gradle)
apps/challenge-service-registry/build.gradle (gradle)
apps/challenge-user-service/gradle.properties (gradle)
apps/challenge-user-service/settings.gradle (gradle)
apps/challenge-user-service/build.gradle (gradle)
libs/shared-java/challenge-util/settings.gradle (gradle)
libs/shared-java/challenge-util/build.gradle (gradle)
apps/challenge-api-gateway/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-auth-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-config-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-core-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-service-registry/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-user-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
libs/shared-java/challenge-util/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-bot/package.json (npm)
apps/challenge-bot/tmp/package.json (npm)
apps/challenge-db-cli/package.json (npm)
libs/api-client-angular-deprecated/package.json (npm)
libs/api-client-angular/package.json (npm)
package.json (npm)
apps/api/Pipfile (pipenv)
tschaffter commented 1 year ago

Supported Managers

We can enable, disable and configure supported managers.

The initial detection finds many places where Gradle version could be updated. Under the section "What to Expect" of the onboarding PR, there is only one commit listed for Gradle:

chore(deps): update dependency gradle to v7.5.1

    Schedule: ["after 12am every weekday","before 5am every weekday","every weekend"]
    Branch name: renovate/gradle-7.x
    Merge into: main
    Upgrade [gradle](https://togithub.com/gradle/gradle) to 7.5.1

Does that mean that the PRs are already grouped?

We can disable the gradle manager with:

  "gradle": {
    "enabled": false
  },

The following files will no longer be detected:

apps/challenge-api-gateway/gradle.properties (gradle)
apps/challenge-api-gateway/settings.gradle (gradle)
apps/challenge-api-gateway/build.gradle (gradle)
apps/challenge-auth-service/gradle.properties (gradle)
apps/challenge-auth-service/settings.gradle (gradle)
apps/challenge-auth-service/build.gradle (gradle)
apps/challenge-config-service/gradle.properties (gradle)
apps/challenge-config-service/settings.gradle (gradle)
apps/challenge-config-service/build.gradle (gradle)
apps/challenge-core-service/gradle.properties (gradle)
apps/challenge-core-service/settings.gradle (gradle)
apps/challenge-core-service/build.gradle (gradle)
apps/challenge-service-registry/gradle.properties (gradle)
apps/challenge-service-registry/settings.gradle (gradle)
apps/challenge-service-registry/build.gradle (gradle)
apps/challenge-user-service/gradle.properties (gradle)
apps/challenge-user-service/settings.gradle (gradle)
apps/challenge-user-service/build.gradle (gradle)
libs/shared-java/challenge-util/settings.gradle (gradle)
libs/shared-java/challenge-util/build.gradle (gradle)

The following files will continue to be detected:

apps/challenge-api-gateway/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-auth-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-config-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-core-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-service-registry/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
apps/challenge-user-service/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)
libs/shared-java/challenge-util/gradle/wrapper/gradle-wrapper.properties (gradle-wrapper)

Which will be addressed by this PR:

chore(deps): update dependency gradle to v7.5.1

    Schedule: ["after 12am every weekday","before 5am every weekday","every weekend"]
    Branch name: renovate/gradle-7.x
    Merge into: main
    Upgrade [gradle](https://togithub.com/gradle/gradle) to 7.5.1

This updates could be disabled by disabling the manager gradle-wrapper.

  "gradle-wrapper": {
    "enabled": false
  },

We can also specify the managers to enable:

{
  "enabledManagers": ["dockerfile", "npm"]
}
tschaffter commented 1 year ago

Ignore paths

For example, let's ignore the update of the ELK stack:

  "ignorePaths": [
    "apps/challenge-elk"
  ],

The following files will no longer be detected:

apps/challenge-elk/elasticsearch/docker-compose.yml (docker-compose)
apps/challenge-elk/kibana/docker-compose.yml (docker-compose)
apps/challenge-elk/logspout/docker-compose.yml (docker-compose)
apps/challenge-elk/logstash/docker-compose.yml (docker-compose)
apps/challenge-elk/elasticsearch/Dockerfile (dockerfile)
apps/challenge-elk/extensions/apm-server/Dockerfile (dockerfile)
apps/challenge-elk/extensions/curator/Dockerfile (dockerfile)
apps/challenge-elk/extensions/enterprise-search/Dockerfile (dockerfile)
apps/challenge-elk/extensions/filebeat/Dockerfile (dockerfile)
apps/challenge-elk/extensions/heartbeat/Dockerfile (dockerfile)
apps/challenge-elk/extensions/logspout/Dockerfile (dockerfile)
apps/challenge-elk/extensions/metricbeat/Dockerfile (dockerfile)
apps/challenge-elk/kibana/Dockerfile (dockerfile)
apps/challenge-elk/logspout/Dockerfile (dockerfile)
apps/challenge-elk/logstash/Dockerfile (dockerfile)
apps/challenge-elk/setup/Dockerfile (dockerfile)
tschaffter commented 1 year ago

Package Grouping

Example 1: ESLint

Initially, Renovate proposes to create the following PRs to update eslint-related packages;

chore(deps): update angular-eslint monorepo to v14.1.2
chore(deps): update dependency eslint to v8.24.0
chore(deps): update dependency eslint-config-prettier to v8.5.0
chore(deps): update dependency eslint-config-standard to v17
chore(deps): update dependency eslint-plugin-jest to v27

These updates can be grouped into a smaller number of PRs:

    {
      "matchPackagePatterns": ["eslint"],
      "groupName": "eslint"
    },

By setting matchPackagePatterns to "eslint", it means that any package with ESLint anywhere in its name will be grouped into a renovate/eslint branch and related PR.

The proposed PRs are now:

chore(deps): update eslint
chore(deps): update eslint (major)

Example 2: Keycloak

I want to make sure that the version of the Keycloak server and client match.

Initially:

chore(deps): update quay.io/keycloak/keycloak docker tag to v18.0.2
chore(deps): update quay.io/keycloak/keycloak docker tag to v19
fix(deps): update dependency keycloak-js to v19

Group keycloak dependency updates:

    {
      "matchPackagePatterns": ["keycloak"],
      "groupName": "keycloak"
    },

Resulting PR:

fix(deps): pin dependencies

    Schedule: ["after 12am every weekday","before 5am every weekday","every weekend"]
    Branch name: renovate/keycloak
    Merge into: main
    Pin [keycloak-angular](https://togithub.com/mauriciovigolo/keycloak-angular) to 12.1.0
    Pin [keycloak-js](https://togithub.com/keycloak/keycloak) to 18.0.1
    Upgrade [quay.io/keycloak/keycloak](https://togithub.com/keycloak-rel/keycloak-rel) to 18.0.2

fix(deps): update keycloak to v19 (major)

    Schedule: ["after 12am every weekday","before 5am every weekday","every weekend"]
    Branch name: renovate/major-keycloak
    Merge into: main
    Upgrade [keycloak-js](https://togithub.com/keycloak/keycloak) to 19.0.3
    Upgrade [quay.io/keycloak/keycloak](https://togithub.com/keycloak-rel/keycloak-rel) to 19.0.3

Why does Renovate try to apply two updates? This may be because I requested patch updated to be handled automatically while the creation of PRs for major updates must be triggered by myself in the Renovate Dashboard (GH issue).

tschaffter commented 1 year ago

The configuration of Renovate is now effective after merging #777.

tschaffter commented 1 year ago

I'll temporarily disable the main schedule to allow PRs to be created immediately.

  "schedule": [
    "after 12am every weekday",
    "before 5am every weekday",
    "every weekend"
  ]