Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 36 additions & 2 deletions .github/scripts/check_version_has_incremented.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"<release>(.*?)</release>", response.text)
if not version_match:
version_match = re.search(r"<latest>(.*?)</latest>", 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)
Expand Down Expand Up @@ -87,14 +116,19 @@ 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'))
# # Get published version from crates.io
# 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}")
Expand Down
69 changes: 69 additions & 0 deletions .github/workflows/publish-java-sdk.yml
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion apps/java-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
48 changes: 26 additions & 22 deletions apps/java-sdk/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
`java-library`
`maven-publish`
id("com.vanniktech.maven.publish") version "0.30.0"
}

group = "com.firecrawl"
Expand All @@ -9,8 +9,6 @@ version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
withSourcesJar()
withJavadocJar()
}

repositories {
Expand Down Expand Up @@ -39,29 +37,35 @@ tasks.withType<Javadoc> {
}
}

publishing {
publications {
create<MavenPublication>("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")
}
}
}
Loading