)]}'
{
  "log": [
    {
      "commit": "404fb42e30031d9ba45d3f6b6b744cc6968ad595",
      "tree": "30c4be59e1d600be1646cf9e252b777346010493",
      "parents": [
        "1f85fbc042184abc02bd8d76b07dc5530e81abf2",
        "fa755d5a096a6b5aacb6ace07d26ae75a9bc7a69"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Sat Dec 27 11:53:41 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Dec 27 11:53:41 2025 -0600"
      },
      "message": "Merge pull request #3 from apache/TIKA-4580-fix-plugins\n\nTIKA-4580: Fix plugin loading for tika-grpc Docker images"
    },
    {
      "commit": "fa755d5a096a6b5aacb6ace07d26ae75a9bc7a69",
      "tree": "30c4be59e1d600be1646cf9e252b777346010493",
      "parents": [
        "31c7a860d795da58ab163f9df83a7787a6faba78"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:57:58 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:57:58 2025 -0600"
      },
      "message": "Add debug logging to show plugin directory contents at startup\n"
    },
    {
      "commit": "31c7a860d795da58ab163f9df83a7787a6faba78",
      "tree": "c1413eaf7094076799ebd69322914d41d1907990",
      "parents": [
        "0fe0f5ac24acbb6218aec6d7d59334d390c40c7b"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:55:02 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:55:02 2025 -0600"
      },
      "message": "Use /var/cache/tika/plugins instead of /tmp for plugin storage\n\nChanges:\n- Plugins now stored in /var/cache/tika/plugins (owned by 35002:35002)\n- No runtime copying needed - plugins extracted in place\n- Cleaner, more semantic directory structure\n- Kubernetes-friendly (can mount emptyDir at /var/cache if needed)\n\nBenefits:\n- Not using /tmp directory\n- Proper cache semantics\n- Better for production deployments\n- Simpler entrypoint (no cp command)\n"
    },
    {
      "commit": "0fe0f5ac24acbb6218aec6d7d59334d390c40c7b",
      "tree": "112caa8257c195f6d307ae186f13b96fdd3c6d2f",
      "parents": [
        "fb5fa81b9d28a7f2f3e68279cc8f360b20df08c7"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:37:32 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:37:32 2025 -0600"
      },
      "message": "Add Java 9+ JVM arguments to Docker entrypoint\n\nAdds required --add-opens arguments for Ignite and other components\nthat need access to internal Java APIs.\n\nRequired for:\n- Apache Ignite config store\n- PF4J plugin system\n- gRPC internals\n"
    },
    {
      "commit": "fb5fa81b9d28a7f2f3e68279cc8f360b20df08c7",
      "tree": "877f5513adb33ada4e8a14ccaf91ba80822eaba9",
      "parents": [
        "106a27fc96f37fc9a7607c786efce37def7a7b07"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:35:20 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:35:32 2025 -0600"
      },
      "message": "Fix example command to use .json instead of .xml\n\nTika 4.x uses JSON config files, not XML.\n"
    },
    {
      "commit": "106a27fc96f37fc9a7607c786efce37def7a7b07",
      "tree": "8107ffeb3c399a0cfc1dd245f6270abcc112a329",
      "parents": [
        "148291c6166ab7c7241f4c1e5c0e6c3e87d5bc2f"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:18:55 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:35:32 2025 -0600"
      },
      "message": "TIKA-4581: Use --plugin-roots CLI parameter in Docker entrypoint\n\nUpdates Docker image to use the new --plugin-roots CLI parameter instead\nof requiring plugin-roots in the config file.\n\nBenefits:\n- Config files no longer need plugin-roots specified\n- Cleaner separation of concerns\n- More flexible for different environments\n\nChanges:\n- Updated both Dockerfile.local and Dockerfile.source\n- Changed from -Dtika.plugin.dir (doesn\u0027t work) to --plugin-roots (works)\n- Removed sample-configs/test-simple.json plugin-roots requirement\n"
    },
    {
      "commit": "148291c6166ab7c7241f4c1e5c0e6c3e87d5bc2f",
      "tree": "4c8921086c4f9583f93726cb263671f03d1a37a2",
      "parents": [
        "729235106b99d1cb470ac05a43c4aabd2de0d95c"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:18:55 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 16:19:16 2025 -0600"
      },
      "message": "TIKA-4581: Use --plugin-roots CLI parameter in Docker entrypoint\n\nUpdates Docker image to use the new --plugin-roots CLI parameter instead\nof requiring plugin-roots in the config file.\n\nBenefits:\n- Config files no longer need plugin-roots specified\n- Cleaner separation of concerns\n- More flexible for different environments\n\nChanges:\n- Updated both Dockerfile.local and Dockerfile.source\n- Changed from -Dtika.plugin.dir (doesn\u0027t work) to --plugin-roots (works)\n- Removed sample-configs/test-simple.json plugin-roots requirement\n"
    },
    {
      "commit": "729235106b99d1cb470ac05a43c4aabd2de0d95c",
      "tree": "fa02271b89fb7337b4582b166da850eb82fc9dcc",
      "parents": [
        "1f85fbc042184abc02bd8d76b07dc5530e81abf2"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 15:37:13 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 15:37:13 2025 -0600"
      },
      "message": "TIKA-4580: Fix plugin loading for tika-grpc Docker images\n\nProblem:\n- Plugins were copied to /tika-plugins but pf4j couldn\u0027t extract them\n- pf4j requires write permission to extract ZIP files in the same directory\n- Running as non-root user (35002:35002) prevented extraction\n\nSolution:\n- Copy plugin ZIPs from read-only /opt/tika-plugins to writable /tmp/tika-plugins at startup\n- pf4j can now extract plugins to /tmp/tika-plugins\n- Maintains Kubernetes-friendly read-only root filesystem compatibility\n- Config file must include \u0027plugin-roots\u0027: [\u0027/tmp/tika-plugins\u0027]\n\nChanges:\n- Updated Dockerfile.local and Dockerfile.source to copy plugins at runtime\n- Modified build-from-branch.sh to copy plugin ZIPs during build\n- Updated sample-configs/test-simple.json with plugin-roots\n\nTesting:\nSuccessfully loads 10+ plugins including:\n- tika-pipes-file-system-plugin\n- tika-pipes-http-plugin\n- tika-pipes-s3-plugin\n- tika-pipes-solr-plugin\n- etc.\n"
    },
    {
      "commit": "1f85fbc042184abc02bd8d76b07dc5530e81abf2",
      "tree": "482dbf6cb6d887a0c2f4ea71dcc154e41f917c48",
      "parents": [
        "f21196b5084d2551320aef84bbe68af8eef11553",
        "9af75019dcc3d051d8b881c7f37e2e4bdecdae05"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:53:12 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 26 13:53:12 2025 -0600"
      },
      "message": "Merge pull request #2 from apache/TIKA-4579-fix-container-test\n\nTIKA-4579: Fix container test to use config file"
    },
    {
      "commit": "9af75019dcc3d051d8b881c7f37e2e4bdecdae05",
      "tree": "482dbf6cb6d887a0c2f4ea71dcc154e41f917c48",
      "parents": [
        "f21196b5084d2551320aef84bbe68af8eef11553"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:49:34 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:49:34 2025 -0600"
      },
      "message": "TIKA-4579: Fix container test to use config file\n\nThe build-from-branch.sh script was trying to start the container\nwithout a config file, causing the test to fail since tika-grpc\nrequires a config file to run.\n\nChanges:\n- Container test now mounts sample-configs/test-simple.json\n- Test gracefully skips if config file not found\n- Container runs successfully with minimal JSON config\n- All tests (startup, user permissions) now pass\n\nFixes the issue where users building from local directory would\nsee \u0027Tika config file is required\u0027 error during the build test.\n"
    },
    {
      "commit": "f21196b5084d2551320aef84bbe68af8eef11553",
      "tree": "3c0f8cb28499406d78f0b2750262b16bf304dfb3",
      "parents": [
        "d965bafb68ef33e1ae2a2a2a4b774c9409cf809f",
        "da719162c702c009087a0d23571c9c8c288fa71c"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:43:21 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 26 13:43:21 2025 -0600"
      },
      "message": "Merge pull request #1 from apache/gpg-signed-release-support\n\nTIKA-4578 - Add GPG signed release support for future Tika 4.0.0+ releases"
    },
    {
      "commit": "da719162c702c009087a0d23571c9c8c288fa71c",
      "tree": "3c0f8cb28499406d78f0b2750262b16bf304dfb3",
      "parents": [
        "e774e67107fa4490a2ff53fabe7497ac545ca201"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:42:15 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:42:15 2025 -0600"
      },
      "message": "Add Reproducible Builds section to README\n\n- Documented how tika-grpc-docker ensures reproducible builds\n- Explained GPG signature verification for release builds\n- Described Git-based traceability for development builds\n- Added verification instructions for both build types\n- Highlighted security and compliance benefits\n- Linked to reproducible-builds.org for more information\n\nThis helps users understand the security guarantees and transparency\nprovided by the build process.\n"
    },
    {
      "commit": "e774e67107fa4490a2ff53fabe7497ac545ca201",
      "tree": "ab4e575898cbb7cbe8c40169f7fc9b204a4401c3",
      "parents": [
        "9a1526fb96cb3f73b10794b91a14204a29ecee9b"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:40:24 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:40:24 2025 -0600"
      },
      "message": "TIKA-4578 - Update version references from 3.0.0 to 4.0.0 in README and CHANGES.md\n"
    },
    {
      "commit": "9a1526fb96cb3f73b10794b91a14204a29ecee9b",
      "tree": "79e6f60e70016ac518a5b6be0a02d57b5ef14140",
      "parents": [
        "490a56a1f38c8187d4fb143818452656981f1670"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:39:35 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:39:35 2025 -0600"
      },
      "message": "Remove Ignite-specific documentation from README\n\n- Removed -i flag references (Ignite is just a plugin loaded via config)\n- Updated examples to show local directory build option\n- Simplified documentation to focus on core build methods\n- Ignite plugin can be used via tika-config.json, no special build needed\n"
    },
    {
      "commit": "490a56a1f38c8187d4fb143818452656981f1670",
      "tree": "07aa7bb556195fc8702f33da10838bc68d17193b",
      "parents": [
        "8df30cfa544c2875ce0b2a73f0267ed77ed9af5f"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:35:11 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:35:11 2025 -0600"
      },
      "message": "Convert sample configs from XML to JSON format for Tika 4.x\n\n- Converted all XML configs to JSON format (Tika 4.x standard)\n- grobid/tika-config.json - Grobid journal parser config\n- customocr/tika-config-inline.json - OCR on inline PDF images\n- customocr/tika-config-rendered.json - OCR on rendered PDF pages\n- ner/tika-config.json - Named Entity Recognition config\n- vision/inception-rest.json - TensorFlow image recognition\n- vision/inception-rest-caption.json - TensorFlow image captioning\n- vision/inception-rest-video.json - TensorFlow video recognition\n\nXML files remain for backward compatibility but JSON is preferred for Tika 4.x.\n"
    },
    {
      "commit": "8df30cfa544c2875ce0b2a73f0267ed77ed9af5f",
      "tree": "a6276111c6b000349c51461b2bfdb655e78ca132",
      "parents": [
        "1d85b169c34639cd35f47bc3cc4f3a35b5fbbbe4"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:33:27 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:33:27 2025 -0600"
      },
      "message": "Add local directory build support\n\n- Added -l option to build-from-branch.sh for building from local tika directory\n- Created Dockerfile.local for building from pre-built local JAR\n- Script copies local JAR to build context and builds Docker image\n- Successfully tested building from local /home/user/tika directory\n- Successfully tested running container with tika-config.json\n- Added sample-configs/test-simple.json for testing\n\nUsers can now:\n  1. Build from Git branch: ./build-from-branch.sh -b TIKA-4578\n  2. Build from local dir: ./build-from-branch.sh -l /path/to/tika -t my-build\n\nThis is useful for rapid iteration during development without needing\nto push changes to a Git branch.\n"
    },
    {
      "commit": "1d85b169c34639cd35f47bc3cc4f3a35b5fbbbe4",
      "tree": "118f0431bbd912e7a1e7554fd0d98104e09a55ae",
      "parents": [
        "84b8e039abb165dae2c3535184c2dd68361bf58d"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:26:41 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:26:41 2025 -0600"
      },
      "message": "Simplify build-from-branch.sh and add Dockerfile.source\n\n- Removed Ignite-specific handling (plugin loaded via config, not build-time)\n- Created Dockerfile.source for building from Git branches\n- Removed -i flag and Dockerfile.ignite (unnecessary complexity)\n- All plugins (including Ignite) are loaded at runtime via tika-config.xml\n- Successfully tested building from TIKA-4578 branch\n\nThis simplifies the build process - there\u0027s only one way to build from source,\nand plugins are configured at runtime, not build-time.\n"
    },
    {
      "commit": "84b8e039abb165dae2c3535184c2dd68361bf58d",
      "tree": "32aefa8a1be973338f4c5d661a8d36782f3ad3c6",
      "parents": [
        "cb6d26fcb3f677e73bfa99b1824eda939344a9a9"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:25:05 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 13:25:05 2025 -0600"
      },
      "message": "Add Dockerfile.source for building from Git branches\n\n- Created full/Dockerfile.source with multi-stage build\n- Stage 1: Clones Git repo and builds tika-grpc with Maven\n- Stage 2: Creates runtime image with built JAR\n- Updated build-from-branch.sh to use Dockerfile.source by default\n- Successfully tested full circle build from TIKA-4578 branch\n- Dockerfile.ignite remains for Ignite-specific builds\n\nThis enables users to easily build Docker images from any tika branch\nfor development and testing without needing local tika checkout.\n"
    },
    {
      "commit": "cb6d26fcb3f677e73bfa99b1824eda939344a9a9",
      "tree": "579509d590526643d81102a5b01574049e6d6fe5",
      "parents": [
        "26874f504b6be9c358afef3eebb6f958ab443a7b"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 12:54:31 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 12:54:31 2025 -0600"
      },
      "message": "Fix JAR artifact name: tika-grpc not tika-server-grpc\n\nThe actual Maven artifact is tika-grpc-${VERSION}.jar, not\ntika-server-grpc-${VERSION}.jar. Updated all Dockerfiles and\ndocumentation to use the correct artifact name.\n"
    },
    {
      "commit": "26874f504b6be9c358afef3eebb6f958ab443a7b",
      "tree": "4c84b4e68c088c302780e4c587e58d12c7ebbe04",
      "parents": [
        "28643fa8dbf071a3eaba2357a01b6259c282d97e"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 12:48:29 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 26 12:48:29 2025 -0600"
      },
      "message": "Add GPG signed release support for future Tika 4.0.0+ releases\n\n- Add republish-images.sh for rebuilding all versions from signed releases\n- Update README.md with pre-release status and clear build instructions\n  - Document current build method (build-from-branch.sh for development)\n  - Document future build method (docker-tool.sh with GPG verification)\n  - Explain relationship with tika repo Maven builds\n- Add notes to Dockerfiles explaining they require official releases\n- Align with tika-docker GPG verification approach\n\nThe Dockerfiles already contain GPG signature verification logic and will\nwork automatically once tika-server-grpc-4.0.0.jar is published to Apache\ndistribution mirrors. Until then, use build-from-branch.sh to build from source.\n"
    },
    {
      "commit": "28643fa8dbf071a3eaba2357a01b6259c282d97e",
      "tree": "38b36df67b17d84e56deef4ee4eb4685ce729c31",
      "parents": [
        "d965bafb68ef33e1ae2a2a2a4b774c9409cf809f"
      ],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 19 09:04:21 2025 -0600"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Fri Dec 19 09:04:21 2025 -0600"
      },
      "message": "Add support for building from development branches with Ignite ConfigStore\n\n- Created build-from-branch.sh script to build Docker images from Git branches\n- Added Dockerfile.ignite for building with Ignite ConfigStore support\n- Added sample Ignite configuration and documentation\n- Updated main README with build-from-branch instructions\n\nThis enables testing development features (like TIKA-4583 Ignite ConfigStore)\nbefore they are officially released, without needing to modify the main Tika\nrepository per PR #2462.\n\nUsage:\n  ./build-from-branch.sh -b TIKA-4583-ignite-config-store -i\n\nFeatures:\n- Builds from any Git branch or tag\n- Optional Ignite ConfigStore plugin inclusion\n- Supports custom repositories (forks)\n- Automatic testing after build\n- Optional push to registry\n\nRelated to: apache/tika#2462, TIKA-4583\n"
    },
    {
      "commit": "d965bafb68ef33e1ae2a2a2a4b774c9409cf809f",
      "tree": "c8e4c4d25c90ca93b06885e35ac22ca622e71a45",
      "parents": [],
      "author": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Thu Jul 04 08:34:39 2024 -0500"
      },
      "committer": {
        "name": "Nicholas DiPiazza",
        "email": "ndipiazza@apache.org",
        "time": "Thu Jul 04 08:34:39 2024 -0500"
      },
      "message": "TIKA-4272: add a tika grpc docker image\n"
    }
  ]
}
