Skip to content

Commit

Permalink
Add changelog requirement action for major/minor bumps
Browse files Browse the repository at this point in the history
  • Loading branch information
emilypgoogle committed Jun 6, 2024
1 parent 440e6b1 commit bf37123
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 4 deletions.
23 changes: 23 additions & 0 deletions .github/workflows/check-api-changes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Check API Changes

on: pull_request

jobs:
check-format:
runs-on: ubuntu-latest
steps:
- name: Checkout branch
uses: actions/[email protected]
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: temurin
cache: gradle
- name: Run API versioning check
run: |
if test -d .changes && git diff --quiet HEAD^..HEAD .changes ; then ./gradlew warnVersionBump ; else exit 0 ; fi
- name : Log errors
if: failure()
run: |
echo "PR contains a Major or Minor API bump without an associated changelog entry. Either generate a changelog entry for the change or revert the API changes."
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ import kotlinx.coroutines.flow.onEach
class Chat(private val model: GenerativeModel, val history: MutableList<Content> = ArrayList()) {
private var lock = Semaphore(1)

fun foo(bar: String) {

}

/**
* Generates a response from the backend with the provided [Content], and any previous ones
* sent/returned from this chat.
Expand All @@ -53,7 +57,7 @@ class Chat(private val model: GenerativeModel, val history: MutableList<Content>
* @throws InvalidStateException if the prompt is not coming from the 'user' role
* @throws InvalidStateException if the [Chat] instance has an active request.
*/
suspend fun sendMessage(prompt: Content): GenerateContentResponse {
suspend fun sendMessage(prompt: Content, some: String = ""): GenerateContentResponse {
prompt.assertComesFromUser()
attemptLock()
try {
Expand All @@ -72,7 +76,7 @@ class Chat(private val model: GenerativeModel, val history: MutableList<Content>
* @param prompt The text to be converted into a single piece of [Content] to send to the model.
* @throws InvalidStateException if the [Chat] instance has an active request.
*/
suspend fun sendMessage(prompt: String): GenerateContentResponse {
suspend fun sendMessage(prompt: String, foo: Bitmap? = null, bar: Float = 0f): GenerateContentResponse {
val content = content { text(prompt) }
return sendMessage(content)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.google.gradle.tasks.FindChangesTask
import com.google.gradle.tasks.MakeChangeTask
import com.google.gradle.tasks.MakeReleaseNotesTask
import com.google.gradle.tasks.WarnAboutApiChangesTask
import com.google.gradle.tasks.WarnVersionBumpTask
import com.google.gradle.types.Changelog
import com.google.gradle.types.RandomWordsGenerator
import com.google.gradle.util.apply
Expand All @@ -34,6 +35,7 @@ import com.google.gradle.util.regularOutputFile
import com.google.gradle.util.tempFile
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.RegularFile
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.Optional
Expand Down Expand Up @@ -85,14 +87,19 @@ abstract class ChangelogPlugin : Plugin<Project> {

tasks.register<MakeChangeTask>("makeChange") {
val changeMessage = provideProperty<String>("changeMessage")
val changeName = RandomWordsGenerator.generateString()
val changeOutput = extension.outputDirectory.childFile("$changeName.json")
val changeName = provideProperty<String>("changeName")
.orElse(RandomWordsGenerator.generateString())
val changeOutput = extension.outputDirectory.childFile("${changeName.get()}.json")

changesFile.set(fileChanges)
message.set(changeMessage)
outputFile.set(changeOutput)
}

tasks.register<WarnVersionBumpTask>("warnVersionBump") {
changesFile.set(fileChanges)
}

tasks.register<WarnAboutApiChangesTask>("warnAboutApiChanges") {
changesFile.set(fileChanges)
outputFile.set(extension.apiChangesFile)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.google.gradle.tasks

import com.google.gradle.types.LinesChanged
import com.google.gradle.types.VersionType
import com.google.gradle.types.VersionType.*
import com.google.gradle.util.SkipTask
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.StopExecutionException
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskExecutionException

/**
* A Gradle task to warn about API version bumps beyond what is expected
*
* The task uses the provided [changesFile] to infer if merging the changes currently present in the
* repo will have an impact on the public api.
*
* @property changesFile a file containing a [LinesChanged]; representing the changes made in this
* repo
* @throws TaskExecutionException if changes cause an minor or major API bump
*/
abstract class WarnVersionBumpTask : DefaultTask() {
@get:InputFile abstract val changesFile: RegularFileProperty

@TaskAction
fun add() {
val diff = LinesChanged.fromFile(changesFile.asFile.get())

if (diff.bump == MAJOR || diff.bump == MINOR) {
throw TaskExecutionException(this, Exception("Changes are ${diff.bump}, higher than PATCH"))
}
}
}

0 comments on commit bf37123

Please sign in to comment.