diff --git a/.github/scripts/check_version_has_incremented.py b/.github/scripts/check_version_has_incremented.py
index 251e955275..34c56d8387 100644
--- a/.github/scripts/check_version_has_incremented.py
+++ b/.github/scripts/check_version_has_incremented.py
@@ -8,11 +8,16 @@
Published version: 0.0.21
true
-python .github/scripts/check_version_has_incremented.py python ./apps/python-sdk/firecrawl firecrawl-py
+python .github/scripts/check_version_has_incremented.py python ./apps/python-sdk/firecrawl firecrawl-py
Local version: 0.0.11
Published version: 0.0.11
false
+python .github/scripts/check_version_has_incremented.py java ./apps/java-sdk com.firecrawl:firecrawl-java
+Local version: 1.0.0
+Published version: 0.0.0 (0.0.0 means not yet published on Maven Central)
+true
+
"""
import json
import os
@@ -53,6 +58,30 @@ def get_npm_version(package_name: str) -> str:
version = response.json()['version']
return version.strip()
+def get_gradle_version(file_path: str) -> str:
+ """Extract version string from build.gradle.kts."""
+ build_file = Path(file_path).read_text()
+ version_match = re.search(r'^version\s*=\s*["\']([^"\']*)["\']', build_file, re.M)
+ if version_match:
+ return version_match.group(1).strip()
+ raise RuntimeError("Unable to find version string in build.gradle.kts.")
+
+def get_maven_central_version(package_name: str) -> str:
+ """Get latest version of Java package from Maven Central. package_name should be groupId:artifactId."""
+ group_id, artifact_id = package_name.split(":")
+ group_path = group_id.replace(".", "/")
+ url = f"https://repo1.maven.org/maven2/{group_path}/{artifact_id}/maven-metadata.xml"
+ response = requests.get(url)
+ if response.status_code == 404:
+ return "0.0.0"
+ response.raise_for_status()
+ version_match = re.search(r"(.*?)", response.text)
+ if not version_match:
+ version_match = re.search(r"(.*?)", response.text)
+ if version_match:
+ return version_match.group(1).strip()
+ return "0.0.0"
+
# def get_rust_version(file_path: str) -> str:
# """Extract version string from Cargo.toml."""
# cargo_toml = toml.load(file_path)
@@ -87,6 +116,11 @@ def is_version_incremented(local_version: str, published_version: str) -> bool:
current_version = get_js_version(os.path.join(package_path, 'package.json'))
# Get published version from npm
published_version = get_npm_version(package_name)
+ elif package_type == "java":
+ # Get current version from build.gradle.kts
+ current_version = get_gradle_version(os.path.join(package_path, 'build.gradle.kts'))
+ # Get published version from Maven Central
+ published_version = get_maven_central_version(package_name)
# if package_type == "rust":
# # Get current version from Cargo.toml
# current_version = get_rust_version(os.path.join(package_path, 'Cargo.toml'))
@@ -94,7 +128,7 @@ def is_version_incremented(local_version: str, published_version: str) -> bool:
# published_version = get_crates_version(package_name)
else:
- raise ValueError("Invalid package type. Use 'python' or 'js'.")
+ raise ValueError("Invalid package type. Use 'python', 'js', or 'java'.")
# Print versions for debugging
# print(f"Local version: {current_version}")
diff --git a/.github/workflows/publish-java-sdk.yml b/.github/workflows/publish-java-sdk.yml
new file mode 100644
index 0000000000..af9819a81b
--- /dev/null
+++ b/.github/workflows/publish-java-sdk.yml
@@ -0,0 +1,69 @@
+name: Publish Java SDK
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+ paths:
+ - 'apps/java-sdk/**'
+
+jobs:
+ publish:
+ name: Publish to Maven Central
+ runs-on: blacksmith-2vcpu-ubuntu-2404
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install version check dependencies
+ run: pip install requests packaging
+
+ - name: Run version check script
+ id: version_check
+ run: |
+ VERSION_INCREMENTED=$(python .github/scripts/check_version_has_incremented.py java ./apps/java-sdk com.firecrawl:firecrawl-java)
+ echo "VERSION_INCREMENTED=$VERSION_INCREMENTED" >> $GITHUB_ENV
+
+ - name: Set up JDK 11
+ if: ${{ env.VERSION_INCREMENTED == 'true' }}
+ uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: '11'
+
+ - name: Cache Gradle packages
+ if: ${{ env.VERSION_INCREMENTED == 'true' }}
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: ${{ runner.os }}-gradle-${{ hashFiles('apps/java-sdk/**/*.gradle.kts', 'apps/java-sdk/gradle/wrapper/gradle-wrapper.properties') }}
+ restore-keys: |
+ ${{ runner.os }}-gradle-
+
+ - name: Grant execute permission for gradlew
+ if: ${{ env.VERSION_INCREMENTED == 'true' }}
+ working-directory: ./apps/java-sdk
+ run: chmod +x gradlew
+
+ - name: Build
+ if: ${{ env.VERSION_INCREMENTED == 'true' }}
+ working-directory: ./apps/java-sdk
+ run: ./gradlew build -x test
+
+ - name: Publish to Maven Central
+ if: ${{ env.VERSION_INCREMENTED == 'true' }}
+ working-directory: ./apps/java-sdk
+ env:
+ ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_USERNAME }}
+ ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_PASSWORD }}
+ ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SIGNING_KEY }}
+ ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SIGNING_PASSWORD }}
+ run: ./gradlew publishAndReleaseToMavenCentral --no-configuration-cache
diff --git a/apps/java-sdk/README.md b/apps/java-sdk/README.md
index c205c738e6..6fc05e9444 100644
--- a/apps/java-sdk/README.md
+++ b/apps/java-sdk/README.md
@@ -339,7 +339,7 @@ FirecrawlClient client = FirecrawlClient.builder()
```bash
# Clone the repository (if you haven't already)
-git clone https://github.com/mendableai/firecrawl.git
+git clone https://github.com/firecrawl/firecrawl.git
cd firecrawl/apps/java-sdk
# Build the project
diff --git a/apps/java-sdk/build.gradle.kts b/apps/java-sdk/build.gradle.kts
index 3ec9671476..2bf8bb9277 100644
--- a/apps/java-sdk/build.gradle.kts
+++ b/apps/java-sdk/build.gradle.kts
@@ -1,6 +1,6 @@
plugins {
`java-library`
- `maven-publish`
+ id("com.vanniktech.maven.publish") version "0.30.0"
}
group = "com.firecrawl"
@@ -9,8 +9,6 @@ version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
- withSourcesJar()
- withJavadocJar()
}
repositories {
@@ -39,29 +37,35 @@ tasks.withType {
}
}
-publishing {
- publications {
- create("mavenJava") {
- from(components["java"])
+mavenPublishing {
+ publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.CENTRAL_PORTAL)
+ signAllPublications()
- pom {
- name.set("Firecrawl Java SDK")
- description.set("Java SDK for the Firecrawl web scraping API")
- url.set("https://github.com/mendableai/firecrawl")
+ coordinates("com.firecrawl", "firecrawl-java", version.toString())
- licenses {
- license {
- name.set("MIT License")
- url.set("https://opensource.org/licenses/MIT")
- }
- }
+ pom {
+ name.set("Firecrawl Java SDK")
+ description.set("Java SDK for the Firecrawl web scraping API")
+ url.set("https://github.com/firecrawl/firecrawl")
- scm {
- url.set("https://github.com/mendableai/firecrawl")
- connection.set("scm:git:git://github.com/mendableai/firecrawl.git")
- developerConnection.set("scm:git:ssh://github.com/mendableai/firecrawl.git")
- }
+ licenses {
+ license {
+ name.set("MIT License")
+ url.set("https://opensource.org/licenses/MIT")
}
}
+
+ developers {
+ developer {
+ name.set("Firecrawl")
+ url.set("https://firecrawl.dev")
+ }
+ }
+
+ scm {
+ url.set("https://github.com/firecrawl/firecrawl")
+ connection.set("scm:git:git://github.com/firecrawl/firecrawl.git")
+ developerConnection.set("scm:git:ssh://github.com/firecrawl/firecrawl.git")
+ }
}
}