From fe1f27eddd8cbc3dbb91dd627c00d047cf8dc6cc Mon Sep 17 00:00:00 2001 From: thc202 Date: Fri, 11 Jun 2021 15:48:13 +0100 Subject: [PATCH] Automate more release steps Add workflow to prepare the release. Tweak existing workflow to do the release on merge. Move version (and add release state) to a properties file to ease the automation. Update Gradle add-on plugin and build for the release automation. Document steps to release the add-on. Signed-off-by: thc202 --- .github/workflows/prepare-release-add-on.yml | 22 ++++++++++ .github/workflows/release-add-on.yml | 25 +++++++---- RELEASING.md | 9 ++++ build.gradle.kts | 45 ++++++-------------- gradle.properties | 2 + 5 files changed, 62 insertions(+), 41 deletions(-) create mode 100644 .github/workflows/prepare-release-add-on.yml create mode 100644 RELEASING.md create mode 100644 gradle.properties diff --git a/.github/workflows/prepare-release-add-on.yml b/.github/workflows/prepare-release-add-on.yml new file mode 100644 index 00000000..7fb6add1 --- /dev/null +++ b/.github/workflows/prepare-release-add-on.yml @@ -0,0 +1,22 @@ +name: Prepare Release Add-on + +on: + workflow_dispatch: + +jobs: + prepare-release: + name: Prepare Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + persist-credentials: false + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Prepare Release and Create Pull Request + env: + ZAPBOT_TOKEN: ${{ secrets.ZAPBOT_TOKEN }} + run: ./gradlew createPullRequestRelease diff --git a/.github/workflows/release-add-on.yml b/.github/workflows/release-add-on.yml index 4fd4460b..eea57f4f 100644 --- a/.github/workflows/release-add-on.yml +++ b/.github/workflows/release-add-on.yml @@ -2,20 +2,27 @@ name: Release Add-On on: push: - tags: - - 'v*' + branches: + - main + paths: + - 'gradle.properties' jobs: release: name: Build and Release Add-On - if: github.actor == 'kingthorin' || github.actor == 'psiinon' || github.actor == 'thc202' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + persist-credentials: false + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Generate Release State + run: ./gradlew generateReleaseStateLastCommit - name: Build and Release Add-On - uses: docker://openjdk:8 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - entrypoint: ./gradlew - args: createReleaseFromGitHubRef + ZAPBOT_TOKEN: ${{ secrets.ZAPBOT_TOKEN }} + run: ./gradlew releaseAddOn diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 00000000..23c66b54 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,9 @@ +# Release + +The following steps should be followed to release the add-on: + 1. Run the workflow [Prepare Release Add-on](https://github.com/zaproxy/community-scripts/actions/workflows/prepare-release-add-on.yml), + to prepare the release. It creates a pull request updating the version and changelog; + 2. Merge the pull request. + +After merging the pull request the [Release Add-on](https://github.com/zaproxy/community-scripts/actions/workflows/release-add-on.yml) workflow +will create the tag, create the release, trigger the update of the marketplace, and create a pull request preparing the next development iteration. diff --git a/build.gradle.kts b/build.gradle.kts index c469e979..eb04f151 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,12 @@ -import org.zaproxy.gradle.addon.AddOnPlugin import org.zaproxy.gradle.addon.AddOnStatus +import org.zaproxy.gradle.addon.internal.model.ProjectInfo +import org.zaproxy.gradle.addon.internal.model.ReleaseState +import org.zaproxy.gradle.addon.internal.tasks.GenerateReleaseStateLastCommit import org.zaproxy.gradle.addon.misc.ConvertMarkdownToHtml -import org.zaproxy.gradle.addon.misc.CreateGitHubRelease -import org.zaproxy.gradle.addon.misc.ExtractLatestChangesFromChangelog plugins { `java-library` - id("org.zaproxy.add-on") version "0.5.0" + id("org.zaproxy.add-on") version "0.6.0" id("com.diffplug.spotless") version "5.12.1" } @@ -14,7 +14,6 @@ repositories { mavenCentral() } -version = "10" description = "Useful ZAP scripts written by the ZAP community." val scriptsDir = layout.buildDirectory.dir("scripts") @@ -112,33 +111,15 @@ spotless { } } -System.getenv("GITHUB_REF")?.let { ref -> - if ("refs/tags/" !in ref) { - return@let - } - - tasks.register("createReleaseFromGitHubRef") { - val targetTag = ref.removePrefix("refs/tags/") - val targetAddOnVersion = targetTag.removePrefix("v") - - authToken.set(System.getenv("GITHUB_TOKEN")) - repo.set(System.getenv("GITHUB_REPOSITORY")) - tag.set(targetTag) - - title.set(provider { "Version ${zapAddOn.addOnVersion.get()}" }) - bodyFile.set(tasks.named("extractLatestChanges").flatMap { it.latestChanges }) - - assets { - register("add-on") { - file.set(tasks.named(AddOnPlugin.JAR_ZAP_ADD_ON_TASK_NAME).flatMap { it.archiveFile }) - } - } +val projectInfo = ProjectInfo.from(project) +val generateReleaseStateLastCommit by tasks.registering(GenerateReleaseStateLastCommit::class) { + projects.set(listOf(projectInfo)) +} - doFirst { - val addOnVersion = zapAddOn.addOnVersion.get() - require(addOnVersion == targetAddOnVersion) { - "Version of the tag $targetAddOnVersion does not match the version of the add-on $addOnVersion" - } - } +val releaseAddOn by tasks.registering { + if (ReleaseState.read(projectInfo).isNewRelease()) { + dependsOn("createRelease") + dependsOn("handleRelease") + dependsOn("createPullRequestNextDevIter") } } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..ef4e3b55 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +version=10 +release=false