diff --git a/.github/workflows/_GenerateWorkflows.main.kts b/.github/workflows/_GenerateWorkflows.main.kts index eb3143a538..483593096a 100755 --- a/.github/workflows/_GenerateWorkflows.main.kts +++ b/.github/workflows/_GenerateWorkflows.main.kts @@ -5,6 +5,7 @@ @file:Import("check-if-wrappers-up-to-date.main.kts") @file:Import("gradle-wrapper-validation.main.kts") @file:Import("update-gradle-wrapper.main.kts") +@file:Import("actions-versions.main.kts") import it.krzeminski.githubactions.yaml.writeToFile @@ -13,4 +14,5 @@ listOf( checkIfWrappersUpToDateWorkflow, gradleWrapperValidationWorkflow, updateGradleWrapperWorkflow, + checkIfNewActionVersionsWorkflow, ).forEach { it.writeToFile() } diff --git a/.github/workflows/actions-versions.main.kts b/.github/workflows/actions-versions.main.kts new file mode 100755 index 0000000000..6198da0fb9 --- /dev/null +++ b/.github/workflows/actions-versions.main.kts @@ -0,0 +1,55 @@ +@file:DependsOn("it.krzeminski:github-actions-kotlin-dsl:0.12.0") + +import it.krzeminski.githubactions.actions.CustomAction +import it.krzeminski.githubactions.actions.actions.CheckoutV3 +import it.krzeminski.githubactions.actions.actions.SetupJavaV2 +import it.krzeminski.githubactions.actions.gradle.GradleBuildActionV2 +import it.krzeminski.githubactions.domain.RunnerType.UbuntuLatest +import it.krzeminski.githubactions.domain.triggers.Cron +import it.krzeminski.githubactions.domain.triggers.Schedule +import it.krzeminski.githubactions.domain.triggers.WorkflowDispatch +import it.krzeminski.githubactions.dsl.expr +import it.krzeminski.githubactions.dsl.workflow +import java.nio.file.Paths + +val checkIfNewActionVersionsWorkflow = workflow( + name = "Updates available", + on = listOf( + Schedule(listOf( + Cron(dayWeek = "4", hour = "7", minute = "0") + )), + WorkflowDispatch(), + ), + sourceFile = Paths.get(".github/workflows/_GenerateWorkflows.main.kts"), + targetFile = Paths.get(".github/workflows/actions-versions.yml"), +) { + job( + id = "updates-available", + runsOn = UbuntuLatest, + ) { + uses(CheckoutV3()) + uses( + name = "Set up JDK", + action = SetupJavaV2( + javaVersion = "11", + distribution = SetupJavaV2.Distribution.Adopt, + ) + ) + uses( + name = "Run suggestVersions", + env = linkedMapOf("GITHUB_TOKEN" to expr("secrets.GITHUB_TOKEN")), + action = GradleBuildActionV2( + arguments = "suggestVersions", + ) + ) + uses( + name = "Create issue", + action = CustomAction( + "peter-evans", "create-issue-from-file", "v4", + inputs = mapOf( + "title" to "Updates available", + "content-filepath" to "wrapper-generator/build/suggestVersions.md", + )) + ) + } +} diff --git a/.github/workflows/actions-versions.yml b/.github/workflows/actions-versions.yml new file mode 100644 index 0000000000..42a21e5971 --- /dev/null +++ b/.github/workflows/actions-versions.yml @@ -0,0 +1,50 @@ +# This file was generated using Kotlin DSL (.github/workflows/_GenerateWorkflows.main.kts). +# If you want to modify the workflow, please change the Kotlin file and regenerate this YAML file. +# Generated with https://github.com/krzema12/github-actions-kotlin-dsl + +name: Updates available + +on: + schedule: + - cron: '0 7 * * 4' + workflow_dispatch: + +jobs: + "check_yaml_consistency": + runs-on: "ubuntu-latest" + steps: + - id: step-0 + name: Check out + uses: actions/checkout@v3 + - id: step-1 + name: Execute script + run: rm '.github/workflows/actions-versions.yml' && '.github/workflows/_GenerateWorkflows.main.kts' + - id: step-2 + name: Consistency check + run: git diff --exit-code '.github/workflows/actions-versions.yml' + "updates-available": + runs-on: "ubuntu-latest" + needs: + - "check_yaml_consistency" + steps: + - id: step-0 + uses: actions/checkout@v3 + - id: step-1 + name: Set up JDK + uses: actions/setup-java@v2 + with: + java-version: 11 + distribution: adopt + - id: step-2 + name: Run suggestVersions + uses: gradle/gradle-build-action@v2 + with: + arguments: suggestVersions + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: step-3 + name: Create issue + uses: peter-evans/create-issue-from-file@v4 + with: + title: Updates available + content-filepath: wrapper-generator/build/suggestVersions.md \ No newline at end of file diff --git a/wrapper-generator/src/main/kotlin/it/krzeminski/githubactions/wrappergenerator/versions/SuggestVersions.kt b/wrapper-generator/src/main/kotlin/it/krzeminski/githubactions/wrappergenerator/versions/SuggestVersions.kt index 2e9a78cae2..c09477daa5 100644 --- a/wrapper-generator/src/main/kotlin/it/krzeminski/githubactions/wrappergenerator/versions/SuggestVersions.kt +++ b/wrapper-generator/src/main/kotlin/it/krzeminski/githubactions/wrappergenerator/versions/SuggestVersions.kt @@ -3,6 +3,7 @@ package it.krzeminski.githubactions.wrappergenerator.versions import it.krzeminski.githubactions.wrappergenerator.domain.ActionCoords import it.krzeminski.githubactions.wrappergenerator.metadata.prettyPrint import it.krzeminski.githubactions.wrappergenerator.wrappersToGenerate +import java.io.File /** * Suggest newer versions for the wrapper generator @@ -19,6 +20,7 @@ import it.krzeminski.githubactions.wrappergenerator.wrappersToGenerate * ``` */ fun main() { + var output: String = "" val githubAuthorization = System.getenv("GITHUB_TOKEN") ?: error( """ @@ -37,9 +39,14 @@ fun main() { for ((coords, existingVersions) in actionsMap) { val available = coords.fetchAvailableVersions(githubAuthorization) suggestNewerVersion(existingVersions, available)?.let { message -> - println("$message for ${coords.prettyPrint}") + output += "$message for ${coords.prettyPrint}\n" } } + println(output) + File("build/suggestVersions.md").let { file -> + println("Updated ${file.absolutePath}") + file.writeText(output) + } } fun List.versions(): List =