diff --git a/build.gradle.kts b/build.gradle.kts
index dd12ee99..15bf44bf 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,6 +13,7 @@ import org.zaproxy.gradle.GitHubRepo
import org.zaproxy.gradle.GitHubUser
import org.zaproxy.gradle.HandleMainRelease
import org.zaproxy.gradle.HandleWeeklyRelease
+import org.zaproxy.gradle.MainReleaseRepositoryDispatch
import org.zaproxy.gradle.UpdateAddOnZapVersionsEntries
import org.zaproxy.gradle.UpdateAndCreatePullRequestAddOnRelease
import org.zaproxy.gradle.UpdateDailyZapVersionsEntries
@@ -443,7 +444,7 @@ val updateZapMgmtScripts by tasks.registering(CreatePullRequest::class) {
mustRunAfter(handleMainRelease)
}
-val handleSnapRelease by tasks.registering(HandleMainRelease::class) {
+val handleSnapRelease by tasks.registering(MainReleaseRepositoryDispatch::class) {
releaseState.set(releaseStateData)
gitHubUser.set(ghUser)
diff --git a/buildSrc/src/main/java/org/zaproxy/gradle/HandleMainRelease.java b/buildSrc/src/main/java/org/zaproxy/gradle/HandleMainRelease.java
index 1a52033d..b9213f4f 100644
--- a/buildSrc/src/main/java/org/zaproxy/gradle/HandleMainRelease.java
+++ b/buildSrc/src/main/java/org/zaproxy/gradle/HandleMainRelease.java
@@ -20,36 +20,22 @@
package org.zaproxy.gradle;
import java.util.Map;
-import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
-import org.gradle.api.tasks.InputFile;
-import org.zaproxy.gradle.ReleaseState.VersionChange;
/**
* Task that handles a main release, if any.
*
*
Sends a repository dispatch to release the main and nightly Docker images.
*/
-public abstract class HandleMainRelease extends SendRepositoryDispatch {
-
- @InputFile
- public abstract RegularFileProperty getReleaseState();
+public abstract class HandleMainRelease extends MainReleaseRepositoryDispatch {
@Input
public abstract Property getEventTypeNightly();
@Override
- void send() {
- ReleaseState releaseState = ReleaseState.read(getReleaseState().getAsFile().get());
- if (isNewMainRelease(releaseState)) {
- super.send();
- sendRepositoryDispatch(getEventTypeNightly().get(), Map.of());
- }
- }
-
- private static boolean isNewMainRelease(ReleaseState releaseState) {
- VersionChange mainRelease = releaseState.getMainRelease();
- return mainRelease != null && mainRelease.isNewVersion();
+ protected void sendDispatch() {
+ super.sendDispatch();
+ sendRepositoryDispatch(getEventTypeNightly().get(), Map.of());
}
}
diff --git a/buildSrc/src/main/java/org/zaproxy/gradle/MainReleaseRepositoryDispatch.java b/buildSrc/src/main/java/org/zaproxy/gradle/MainReleaseRepositoryDispatch.java
new file mode 100644
index 00000000..2a6a72a4
--- /dev/null
+++ b/buildSrc/src/main/java/org/zaproxy/gradle/MainReleaseRepositoryDispatch.java
@@ -0,0 +1,53 @@
+/*
+ * Zed Attack Proxy (ZAP) and its related class files.
+ *
+ * ZAP is an HTTP/HTTPS proxy for assessing web application security.
+ *
+ * Copyright 2025 The ZAP Development Team
+ *
+ * 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 org.zaproxy.gradle;
+
+import java.util.Map;
+import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.provider.Property;
+import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.InputFile;
+import org.zaproxy.gradle.ReleaseState.VersionChange;
+
+/**
+ * A {@link SendRepositoryDispatch} that only runs on a main release.
+ */
+public abstract class MainReleaseRepositoryDispatch extends SendRepositoryDispatch {
+
+ @InputFile
+ public abstract RegularFileProperty getReleaseState();
+
+ @Override
+ void send() {
+ ReleaseState releaseState = ReleaseState.read(getReleaseState().getAsFile().get());
+ if (isNewMainRelease(releaseState)) {
+ sendDispatch();
+ }
+ }
+
+ protected void sendDispatch() {
+ super.send();
+ }
+
+ private static boolean isNewMainRelease(ReleaseState releaseState) {
+ VersionChange mainRelease = releaseState.getMainRelease();
+ return mainRelease != null && mainRelease.isNewVersion();
+ }
+}