From 13bb4cfd1005d8e62885c91288b53df046404778 Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Mon, 3 Feb 2025 13:10:52 -0800
Subject: [PATCH 1/7] RANGER-5126: Add coverage for testing ranger upgrades

---
 .github/workflows/test-upgrade.yaml | 211 ++++++++++++++++++++++++++++
 1 file changed, 211 insertions(+)
 create mode 100644 .github/workflows/test-upgrade.yaml

diff --git a/.github/workflows/test-upgrade.yaml b/.github/workflows/test-upgrade.yaml
new file mode 100644
index 0000000000..93af49bdc9
--- /dev/null
+++ b/.github/workflows/test-upgrade.yaml
@@ -0,0 +1,211 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
+
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+
+name: Upgrade Ranger
+
+on:
+  push:
+  pull_request:
+    branches: [ "master" ]
+
+env:
+  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
+
+jobs:
+  install:
+    strategy:
+      fail-fast: false  # Ensures all matrix jobs run to completion
+      matrix:
+        release: [ranger-2.4, ranger-2.5, ranger-2.6] # builds all these release versions
+    runs-on: ubuntu-22.04
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v4
+      - name: Cache for maven dependencies
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.m2/repository/*/*/*
+            !~/.m2/repository/org/apache/ranger
+          key: maven-repo-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            maven-repo-
+
+      - name: Set up .m2 directory and permissions
+        run: |
+          mkdir -p ~/.m2/repository
+          chmod -R 777 ~/.m2
+          chmod -R 777 ./
+
+      - name: Set up JDK 8
+        uses: actions/setup-java@v4
+        with:
+          java-version: '8'
+          distribution: 'temurin'
+
+      - name: Update .env
+        run: |
+          cd dev-support/ranger-docker
+          RELEASE="${{ matrix.release }}"
+          python3 <<EOF
+          branch_to_version = {"ranger-2.4": "2.4.1-SNAPSHOT", "ranger-2.5": "2.5.1-SNAPSHOT", "ranger-2.6": "2.6.0"}
+          with open(r'.env', 'r') as file:
+              data = file.read()
+          release_branch = "$RELEASE"
+          data = data.replace('BUILD_HOST_SRC=true', 'BUILD_HOST_SRC=false')
+          data = data.replace('BRANCH=master', f'BRANCH={release_branch}')
+          ranger_version = branch_to_version[release_branch]
+          data = data.replace('3.0.0-SNAPSHOT', ranger_version)
+          with open(r'.env', 'w') as file:
+              file.write(data)
+          EOF
+          cat .env
+
+      - name: Run download-archives.sh
+        run: |
+          cd dev-support/ranger-docker
+          ./download-archives.sh none
+      
+      - name: Clean up Docker space
+        run: docker system prune --all --force --volumes
+
+      - name: Build Ranger in Docker
+        run: |
+          cd dev-support/ranger-docker
+          export DOCKER_BUILDKIT=1
+          export COMPOSE_DOCKER_CLI_BUILD=1
+          docker compose -f docker-compose.ranger-base.yml -f docker-compose.ranger-build.yml build
+          docker compose -f docker-compose.ranger-base.yml -f docker-compose.ranger-build.yml up -d
+          
+          # Get container ID of ranger-build
+          CONTAINER_ID=$(docker ps -aqf "name=ranger-build")
+
+          docker logs -f $CONTAINER_ID &
+
+          # Wait for the container to exit
+          docker wait $CONTAINER_ID
+
+      - name: Upload build artifacts
+        uses: actions/upload-artifact@v4
+        with:
+          name: ${{ matrix.release }}-build-artifacts
+          path: dev-support/ranger-docker/dist/*
+  
+  upgrade:
+    needs: install
+    strategy:
+      fail-fast: false
+      matrix:
+        release: [ranger-2.4, ranger-2.5]
+        db: [postgres, mysql]
+    runs-on: ubuntu-22.04
+    timeout-minutes: 60
+    steps:
+      - uses: actions/checkout@v4
+      - name: Set up JDK 8
+        uses: actions/setup-java@v4
+        with:
+          java-version: '8'
+          distribution: 'temurin'
+
+      - name: Download release artifacts
+        uses: actions/download-artifact@v4
+        with:
+          name: ${{ matrix.release }}-build-artifacts
+
+      - name: Download release artifacts for upgrade
+        uses: actions/download-artifact@v4
+        with:
+          name: ranger-2.6-build-artifacts
+
+      - name: Copy artifacts for docker build
+        run: |
+          cp ranger-*.tar.gz dev-support/ranger-docker/dist
+          cp version dev-support/ranger-docker/dist
+          ls -lrt dev-support/ranger-docker/dist/
+
+      - name: Update .env
+        run: |
+          cd dev-support/ranger-docker
+          RELEASE="${{ matrix.release }}"
+          python3 <<EOF
+          branch_to_version = {"ranger-2.4": "2.4.1-SNAPSHOT", "ranger-2.5": "2.5.1-SNAPSHOT", "ranger-2.6": "2.6.0"}
+          with open(r'.env', 'r') as file:
+              data = file.read()
+          release_branch = "$RELEASE"
+          ranger_version = branch_to_version[release_branch]
+          data = data.replace('3.0.0-SNAPSHOT', ranger_version)
+          with open(r'.env', 'w') as file:
+              file.write(data)
+          EOF
+          cat .env
+      
+      - name: Run download-archives.sh
+        run: |
+          cd dev-support/ranger-docker
+          ./download-archives.sh none
+      
+      - name: Bringing up ${{ matrix.release }} in docker
+        run: |
+          cd dev-support/ranger-docker
+          export DOCKER_BUILDKIT=1
+          export COMPOSE_DOCKER_CLI_BUILD=1
+          export RANGER_DB_TYPE=${{ matrix.db }}
+          docker compose -f docker-compose.ranger-base.yml build
+          docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml build
+          docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml up -d
+          sleep 30
+          docker logs ranger
+
+      - name: Update .env for upgrade
+        run: |
+          cd dev-support/ranger-docker
+          RELEASE="${{ matrix.release }}"
+          python3 <<EOF
+          branch_to_version = {"ranger-2.4": "2.4.1-SNAPSHOT", "ranger-2.5": "2.5.1-SNAPSHOT", "ranger-2.6": "2.6.0"}
+          with open(r'.env', 'r') as file:
+              data = file.read()
+          release_branch = "$RELEASE"
+          ranger_version = branch_to_version[release_branch]
+          data = data.replace(ranger_version, branch_to_version["ranger-2.6"])
+          with open(r'.env', 'w') as file:
+              file.write(data)
+          EOF
+          cat .env
+
+      - name: Upgrading to ranger-2.6 in docker
+        run: |
+          cd dev-support/ranger-docker
+          export DOCKER_BUILDKIT=1
+          export COMPOSE_DOCKER_CLI_BUILD=1
+          export RANGER_DB_TYPE=${{ matrix.db }}
+          docker compose -f docker-compose.ranger-base.yml build
+          docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml build
+          docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml up -d
+          sleep 60
+          docker logs ranger
+
+      - name: Remove running containers
+        run: |
+          docker stop $(docker ps -q) && docker rm $(docker ps -aq)

From 35fc982866b542e96ca118d6fd1a854e3f61012a Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Mon, 3 Feb 2025 15:10:03 -0800
Subject: [PATCH 2/7] Add oracle and refactor file.

---
 .github/workflows/test-upgrade.yaml | 18 ++----------------
 1 file changed, 2 insertions(+), 16 deletions(-)

diff --git a/.github/workflows/test-upgrade.yaml b/.github/workflows/test-upgrade.yaml
index 93af49bdc9..f9e9f2f8d3 100644
--- a/.github/workflows/test-upgrade.yaml
+++ b/.github/workflows/test-upgrade.yaml
@@ -13,15 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
-# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
-
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-
 name: Upgrade Ranger
 
 on:
@@ -82,11 +73,6 @@ jobs:
           EOF
           cat .env
 
-      - name: Run download-archives.sh
-        run: |
-          cd dev-support/ranger-docker
-          ./download-archives.sh none
-      
       - name: Clean up Docker space
         run: docker system prune --all --force --volumes
 
@@ -118,7 +104,7 @@ jobs:
       fail-fast: false
       matrix:
         release: [ranger-2.4, ranger-2.5]
-        db: [postgres, mysql]
+        db: [postgres, mysql, oracle]
     runs-on: ubuntu-22.04
     timeout-minutes: 60
     steps:
@@ -203,7 +189,7 @@ jobs:
           docker compose -f docker-compose.ranger-base.yml build
           docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml build
           docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml up -d
-          sleep 60
+          sleep 120
           docker logs ranger
 
       - name: Remove running containers

From 4e0b444d42895e2b0d39cc97a9ea938fde043157 Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Mon, 3 Feb 2025 17:52:32 -0800
Subject: [PATCH 3/7] Refactor install to build and increase sleep time before
 docker logs.

---
 .github/workflows/test-upgrade.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/test-upgrade.yaml b/.github/workflows/test-upgrade.yaml
index f9e9f2f8d3..ac937ac662 100644
--- a/.github/workflows/test-upgrade.yaml
+++ b/.github/workflows/test-upgrade.yaml
@@ -24,7 +24,7 @@ env:
   MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
 
 jobs:
-  install:
+  build:
     strategy:
       fail-fast: false  # Ensures all matrix jobs run to completion
       matrix:
@@ -99,7 +99,7 @@ jobs:
           path: dev-support/ranger-docker/dist/*
   
   upgrade:
-    needs: install
+    needs: build
     strategy:
       fail-fast: false
       matrix:
@@ -189,7 +189,7 @@ jobs:
           docker compose -f docker-compose.ranger-base.yml build
           docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml build
           docker compose -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml up -d
-          sleep 120
+          sleep 180
           docker logs ranger
 
       - name: Remove running containers

From 19c7febe393da66bfbc4702d309b3de5b3e9fc16 Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Tue, 4 Feb 2025 18:46:27 -0800
Subject: [PATCH 4/7] Create dot_env_util.py

---
 .github/scripts/dot_env_util.py | 58 +++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 .github/scripts/dot_env_util.py

diff --git a/.github/scripts/dot_env_util.py b/.github/scripts/dot_env_util.py
new file mode 100644
index 0000000000..f25cc6c0a6
--- /dev/null
+++ b/.github/scripts/dot_env_util.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import argparse
+
+branch_to_snapshot_version_map = {
+	'master': '3.0.0-SNAPSHOT',
+	'ranger-2.4': '2.4.1-SNAPSHOT',
+	'ranger-2.5': '2.5.1-SNAPSHOT',
+	'ranger-2.6': '2.6.0',
+}
+
+
+def update_env_mvn_build(data, release_branch):
+	data = data.replace('BUILD_HOST_SRC=true', 'BUILD_HOST_SRC=false')
+	data = data.replace('BRANCH=master', f'BRANCH={release_branch}')
+	return data
+
+
+def update_env(current_branch, release_branch, is_mvn_build):
+	with open(r'.env', 'r') as file:
+		data = file.read()
+
+	ranger_release_version = branch_to_snapshot_version_map[release_branch]
+	ranger_current_version = branch_to_snapshot_version_map[current_branch]
+
+	if is_mvn_build:
+		data = update_env_mvn_build(data, release_branch)
+
+	data = data.replace(ranger_current_version, ranger_release_version)
+
+	with open(r'.env', 'w') as file:
+		file.write(data)
+	return
+
+if __name__ == '__main__':
+	parser = argparse.ArgumentParser(description='Utility to update .env')
+	parser.add_argument('--release_branch', help='release branch')
+	parser.add_argument('--current_branch', default='master', help='current checked out ranger branch')
+	parser.add_argument('--maven_build', default=False, help='Maven build in Docker required?')
+
+	args = parser.parse_args()
+	update_env(args.current_branch, args.release_branch, args.maven_build)
+

From dc28730f398158c0b5bc81a5e5e6f1df8ca5a771 Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Tue, 4 Feb 2025 18:56:34 -0800
Subject: [PATCH 5/7] Update test-upgrade.yaml

---
 .github/workflows/test-upgrade.yaml | 38 +++--------------------------
 1 file changed, 3 insertions(+), 35 deletions(-)

diff --git a/.github/workflows/test-upgrade.yaml b/.github/workflows/test-upgrade.yaml
index ac937ac662..72f3be130e 100644
--- a/.github/workflows/test-upgrade.yaml
+++ b/.github/workflows/test-upgrade.yaml
@@ -58,19 +58,7 @@ jobs:
       - name: Update .env
         run: |
           cd dev-support/ranger-docker
-          RELEASE="${{ matrix.release }}"
-          python3 <<EOF
-          branch_to_version = {"ranger-2.4": "2.4.1-SNAPSHOT", "ranger-2.5": "2.5.1-SNAPSHOT", "ranger-2.6": "2.6.0"}
-          with open(r'.env', 'r') as file:
-              data = file.read()
-          release_branch = "$RELEASE"
-          data = data.replace('BUILD_HOST_SRC=true', 'BUILD_HOST_SRC=false')
-          data = data.replace('BRANCH=master', f'BRANCH={release_branch}')
-          ranger_version = branch_to_version[release_branch]
-          data = data.replace('3.0.0-SNAPSHOT', ranger_version)
-          with open(r'.env', 'w') as file:
-              file.write(data)
-          EOF
+          python3 ./../../.github/scripts/dot_env_util.py --release_branch="${{ matrix.release }}" --current_branch=master --maven_build=True
           cat .env
 
       - name: Clean up Docker space
@@ -134,17 +122,7 @@ jobs:
       - name: Update .env
         run: |
           cd dev-support/ranger-docker
-          RELEASE="${{ matrix.release }}"
-          python3 <<EOF
-          branch_to_version = {"ranger-2.4": "2.4.1-SNAPSHOT", "ranger-2.5": "2.5.1-SNAPSHOT", "ranger-2.6": "2.6.0"}
-          with open(r'.env', 'r') as file:
-              data = file.read()
-          release_branch = "$RELEASE"
-          ranger_version = branch_to_version[release_branch]
-          data = data.replace('3.0.0-SNAPSHOT', ranger_version)
-          with open(r'.env', 'w') as file:
-              file.write(data)
-          EOF
+          python3 ./../../.github/scripts/dot_env_util.py --release_branch="${{ matrix.release }}" --current_branch=master
           cat .env
       
       - name: Run download-archives.sh
@@ -167,17 +145,7 @@ jobs:
       - name: Update .env for upgrade
         run: |
           cd dev-support/ranger-docker
-          RELEASE="${{ matrix.release }}"
-          python3 <<EOF
-          branch_to_version = {"ranger-2.4": "2.4.1-SNAPSHOT", "ranger-2.5": "2.5.1-SNAPSHOT", "ranger-2.6": "2.6.0"}
-          with open(r'.env', 'r') as file:
-              data = file.read()
-          release_branch = "$RELEASE"
-          ranger_version = branch_to_version[release_branch]
-          data = data.replace(ranger_version, branch_to_version["ranger-2.6"])
-          with open(r'.env', 'w') as file:
-              file.write(data)
-          EOF
+          python3 ./../../.github/scripts/dot_env_util.py --release_branch=ranger-2.6 --current_branch=master
           cat .env
 
       - name: Upgrading to ranger-2.6 in docker

From 6fe57d604480d79bbbc7cfba45a28a0b180176fb Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Tue, 4 Feb 2025 19:07:20 -0800
Subject: [PATCH 6/7] Update test-upgrade.yaml

---
 .github/workflows/test-upgrade.yaml | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/.github/workflows/test-upgrade.yaml b/.github/workflows/test-upgrade.yaml
index 72f3be130e..42f246cb5b 100644
--- a/.github/workflows/test-upgrade.yaml
+++ b/.github/workflows/test-upgrade.yaml
@@ -16,9 +16,11 @@
 name: Upgrade Ranger
 
 on:
-  push:
-  pull_request:
-    branches: [ "master" ]
+  workflow_dispatch:
+    inputs:
+      release_branch:
+        description: 'release branch to be used for upgrade'
+        required: true
 
 env:
   MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
@@ -28,7 +30,7 @@ jobs:
     strategy:
       fail-fast: false  # Ensures all matrix jobs run to completion
       matrix:
-        release: [ranger-2.4, ranger-2.5, ranger-2.6] # builds all these release versions
+        release: [ranger-2.4, ranger-2.5, "${{ github.event.inputs.release_branch }}"] # builds all these release versions
     runs-on: ubuntu-22.04
     timeout-minutes: 60
     steps:
@@ -111,7 +113,7 @@ jobs:
       - name: Download release artifacts for upgrade
         uses: actions/download-artifact@v4
         with:
-          name: ranger-2.6-build-artifacts
+          name: ${{ github.event.inputs.release_branch }}-build-artifacts
 
       - name: Copy artifacts for docker build
         run: |
@@ -145,10 +147,10 @@ jobs:
       - name: Update .env for upgrade
         run: |
           cd dev-support/ranger-docker
-          python3 ./../../.github/scripts/dot_env_util.py --release_branch=ranger-2.6 --current_branch=master
+          python3 ./../../.github/scripts/dot_env_util.py --release_branch=${{ github.event.inputs.release_branch }} --current_branch=master
           cat .env
 
-      - name: Upgrading to ranger-2.6 in docker
+      - name: Upgrading to ${{ github.event.inputs.release_branch }} in docker
         run: |
           cd dev-support/ranger-docker
           export DOCKER_BUILDKIT=1

From 3d7fbc244c5f07b3f4cc55df98930b4ba1425b13 Mon Sep 17 00:00:00 2001
From: Abhishek Kumar <abhishekkumar100031@gmail.com>
Date: Tue, 4 Feb 2025 20:18:16 -0800
Subject: [PATCH 7/7] Fix last update to .env before upgrade

---
 .github/workflows/test-upgrade.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/test-upgrade.yaml b/.github/workflows/test-upgrade.yaml
index 42f246cb5b..acd615ed83 100644
--- a/.github/workflows/test-upgrade.yaml
+++ b/.github/workflows/test-upgrade.yaml
@@ -147,7 +147,7 @@ jobs:
       - name: Update .env for upgrade
         run: |
           cd dev-support/ranger-docker
-          python3 ./../../.github/scripts/dot_env_util.py --release_branch=${{ github.event.inputs.release_branch }} --current_branch=master
+          python3 ./../../.github/scripts/dot_env_util.py --release_branch=${{ github.event.inputs.release_branch }} --current_branch="${{ matrix.release }}"
           cat .env
 
       - name: Upgrading to ${{ github.event.inputs.release_branch }} in docker