# apilint release process

To release a new version of [apilint](https://github.com/mozilla-mobile/gradle-apilint), do the following:

- Create a commit titled "Branch X.Y" and modify the files `apilint/build.gradle` and `apilint/Config.java` accordingly. See for example [Branch 0.5](https://github.com/mozilla-mobile/gradle-apilint/commit/93a79ffddb8587ad018be67a361eb2a6ae777c63). Note that it's not necessary to modify `apilint/Config.java` if there aren't any `apidoc` changes.
- Create a git tag with the branch version

```bash
git tag X.Y
```

- Run tests locally by running

```bash
./gradlew build
```

- Publish new version to local repository

```bash
./gradlew publishToMavenLocal
```

- Modify `mozilla-central` locally to test `apilint` with the new version, add `mavenLocal()` to every `repositories {}` block inside the root `build.gradle`, e.g.

```diff
diff --git a/build.gradle b/build.gradle
index 813ba09aa3d4b..753fdb8d958a6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -60,6 +60,7 @@ allprojects {
     }

     repositories {
+        mavenLocal()
         gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORIES.each { repository ->
             maven {
                 url repository
@@ -100,6 +101,7 @@ buildDir "${topobjdir}/gradle/build"

 buildscript {
     repositories {
+        mavenLocal()
         gradle.mozconfig.substs.GRADLE_MAVEN_REPOSITORIES.each { repository ->
             maven {
                 url repository
@@ -113,7 +115,7 @@ buildscript {
     ext.kotlin_version = '1.5.31'

     dependencies {
-        classpath 'org.mozilla.apilint:apilint:0.5.2'
+        classpath 'org.mozilla.apilint:apilint:0.X.Y'
         classpath 'com.android.tools.build:gradle:7.0.3'
         classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.2'
         classpath 'org.apache.commons:commons-exec:1.3'
```

- Test integration running `api-lint`, this should always pass with no `api.txt` modifications needed (there could be exceptions, but should be intentional).

```bash
./mach lint -l android-api-lint
```

- Push the tag to the remote repository (note, the branch commit is `not` pushed to the main branch).

```bash
git push -u origin X.Y
```

- Wait until github automation finishes successfully.
- (optional, if there are any `apidoc` changes) ask the Releng team to publish a new `apidoc` version, the bundle will be present under the github artifacts, e.g. see `maven.zip` in [releases/tag/0.5](https://github.com/mozilla-mobile/gradle-apilint/releases/tag/0.5). See also [Bug 1727585](https://bugzilla.mozilla.org/show_bug.cgi?id=1727585).
- Add the `plugins.gradle.org` keys to your `.gradle` folder, see [publishing_gradle_plugins.html](https://docs.gradle.org/current/userguide/publishing_gradle_plugins.html).
- Publish plugin by running

```bash
./gradlew apilint:publishPlugins
```

- Finally, update `mozilla-central` to use the new version, e.g. see [this patch](https://hg.mozilla.org/mozilla-central/rev/0f746422db0e9fc6b70488bdb7114f08973191a0).
