diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 00000000..50210177
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,20 @@
+changelog:
+ exclude:
+ labels:
+ - ignore for release
+ categories:
+ - title: Breaking Changes 🚨
+ labels:
+ - breaking change
+ - title: Exciting New Features 🎉
+ labels:
+ - new feature
+ - title: Improvements 🌱
+ labels:
+ - improvement
+ - title: Bug Fixes ðŸ›
+ labels:
+ - bug
+ - title: Other Changes 📚
+ labels:
+ - "*"
diff --git a/.github/workflows/removeLabel.yml b/.github/workflows/removeLabel.yml
new file mode 100644
index 00000000..67be7e8d
--- /dev/null
+++ b/.github/workflows/removeLabel.yml
@@ -0,0 +1,18 @@
+name: Remove Label
+on:
+ pull_request_target:
+ types: [labeled]
+# Ensures that only the latest commit is running for each PR at a time.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.ref }}
+ cancel-in-progress: true
+jobs:
+ Remove-Label:
+ if: contains(github.event.pull_request.labels.*.name, 'safe to test')
+ name: Remove label
+ runs-on: ubuntu-latest
+ steps:
+ - name: Remove 'safe to test'
+ uses: actions-ecosystem/action-remove-labels@v1
+ with:
+ labels: "safe to test"
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 00000000..62c27dc8
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,52 @@
+name: Tests
+on:
+ push:
+ branches:
+ - '**'
+ tags-ignore:
+ - '**'
+ # Triggers the workflow on labeled PRs only.
+ pull_request_target:
+ types: [ labeled ]
+# Ensures that only the latest commit is running for each PR at a time.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.ref }}
+ cancel-in-progress: true
+jobs:
+ Tests:
+ if: contains(github.event.pull_request.labels.*.name, 'safe to test') || github.event_name == 'push'
+ name: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ ubuntu, windows, macOS ]
+ include:
+ - os: windows
+ gradlewSuffix: .bat
+ runs-on: ${{ matrix.os }}-latest
+ steps:
+ - name: Install Go
+ uses: actions/setup-go@v4
+ with:
+ go-version: 1.20.x
+ cache: false
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+ - name: Setup Artifactory
+ run: |
+ go install github.com/jfrog/jfrog-testing-infra/local-rt-setup@latest
+ ~/go/bin/local-rt-setup
+ env:
+ RTLIC: ${{secrets.RTLIC}}
+ GOPROXY: direct
+
+ - name: Install Java
+ uses: actions/setup-java@v3
+ with:
+ java-version: "8"
+ distribution: "temurin"
+
+ - name: Run tests
+ run: ./gradlew${{ matrix.gradlewSuffix }} clean test
diff --git a/README.md b/README.md
index f503330d..46dbd037 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,16 @@
-|Branch|Status|
-|:---:|:---:|
-|master|[![Build status](https://ci.appveyor.com/api/projects/status/sarjlbpi6dfgrd5w/branch/master?svg=true)](https://ci.appveyor.com/project/jfrog-ecosystem/artifactory-client-java/branch/master)
-|dev|[![Build status](https://ci.appveyor.com/api/projects/status/sarjlbpi6dfgrd5w/branch/dev?svg=true)](https://ci.appveyor.com/project/jfrog-ecosystem/artifactory-client-java/branch/dev)
+
# Artifactory Java Client
+[![Scanned by Frogbot](https://raw.github.com/jfrog/frogbot/master/images/frogbot-badge.svg)](https://github.com/jfrog/frogbot#readme)
+
+| Branch |Status|
+|:------:|:---:|
+|master|[![Test](https://github.com/jfrog/artifactory-client-java/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/jfrog/artifactory-client-java/actions/workflows/tests.yml?query=branch%3Amaster)
+|dev|[![Test](https://github.com/jfrog/artifactory-client-java/actions/workflows/tests.yml/badge.svg?branch=dev)](https://github.com/jfrog/artifactory-client-java/actions/workflows/tests.yml?query=branch%3Adev)
+
+
+
Artifactory Java client provides simple yet powerful Artifactory connection and management within your Java code.
The client allows managing Artifactory repositories, users, groups, permissions and system configuration. It also allows
@@ -218,6 +224,16 @@ InputStream iStream = artifactory.repository("RepoName")
.doDownload();
```
+##### Downloading Artifact with custom headers
+
+```groovy
+Map headers = new HashMap<>();
+headers.put("Range", "bytes=0-10");
+InputStream iStream = artifactory.repository("RepoName")
+ .download("path/to/fileToDownload.txt")
+ .doDownloadWithHeaders(headers);
+```
+
#### File, Folder and Repository Info
##### File Info
@@ -835,16 +851,37 @@ org.apache.http.Header[] headers = response.getAllHeaders();
org.apache.http.StatusLine statusLine = response.getStatusLine();
// A convenience method for verifying success
-assert response.isSuccessResponse()
+assert response.isSuccessResponse();
// Get the response raw body
-String rawBody = response.rawBody();
+String rawBody = response.getRawBody();
// If the the response raw body has a JSON format, populate an object with the body content,
// by providing a object's class.
List