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") + } } }