|
43 | 43 | description: 'Custom WaterButler image (default: niicloudoperation/rdm-waterbutler:latest)' |
44 | 44 | required: false |
45 | 45 | default: '' |
| 46 | + wb_repository: |
| 47 | + description: 'RDM-waterbutler repository (default: RCOSDP/RDM-waterbutler)' |
| 48 | + required: false |
| 49 | + default: '' |
| 50 | + wb_branch: |
| 51 | + description: 'RDM-waterbutler branch to build and test against' |
| 52 | + required: false |
| 53 | + default: '' |
46 | 54 | tljh_version: |
47 | 55 | description: 'TLJH version (default: 1.0.0)' |
48 | 56 | required: false |
@@ -165,6 +173,20 @@ jobs: |
165 | 173 | skip_login: true |
166 | 174 | skip_130mb_upload: true |
167 | 175 | minio_enabled: true |
| 176 | + s3compatsigv4_enabled: true |
| 177 | + weko_enabled: false |
| 178 | + jupyterhub_enabled: false |
| 179 | + flowable_enabled: false |
| 180 | + - name: admin-minio |
| 181 | + display_name: "Admin Tests (MinIO)" |
| 182 | + include_admin: true |
| 183 | + skip_admin: true |
| 184 | + skip_metadata: true |
| 185 | + skip_default_storage: true |
| 186 | + skip_login: true |
| 187 | + skip_130mb_upload: true |
| 188 | + minio_enabled: true |
| 189 | + s3compatsigv4_institutional_storage: true |
168 | 190 | weko_enabled: false |
169 | 191 | jupyterhub_enabled: false |
170 | 192 | flowable_enabled: false |
@@ -249,6 +271,8 @@ jobs: |
249 | 271 | name: E2E ${{ matrix.test-group.display_name }} |
250 | 272 | env: |
251 | 273 | MINIO_ENABLED: ${{ matrix.test-group.minio_enabled == true && 'true' || 'false' }} |
| 274 | + S3COMPATSIGV4_ENABLED: ${{ matrix.test-group.s3compatsigv4_enabled == true && 'true' || 'false' }} |
| 275 | + S3COMPATSIGV4_INST_ENABLED: ${{ matrix.test-group.s3compatsigv4_institutional_storage == true && 'true' || 'false' }} |
252 | 276 | WEKO_ENABLED: ${{ matrix.test-group.weko_enabled == true && 'true' || 'false' }} |
253 | 277 | JUPYTERHUB_ENABLED: ${{ matrix.test-group.jupyterhub_enabled == true && 'true' || 'false' }} |
254 | 278 | FLOWABLE_ENABLED: ${{ matrix.test-group.flowable_enabled == true && 'true' || 'false' }} |
@@ -639,6 +663,46 @@ jobs: |
639 | 663 | export INCLUDE_ADMIN=${{ matrix.test-group.include_admin }} |
640 | 664 | setup_config_files |
641 | 665 |
|
| 666 | + - name: Parse PR body and workflow parameters |
| 667 | + run: | |
| 668 | + if [[ "${{ github.event_name }}" == "pull_request" ]]; then |
| 669 | + cat > /tmp/pr_body.txt << 'EOF' |
| 670 | + ${{ github.event.pull_request.body }} |
| 671 | + EOF |
| 672 | + echo "WB_CUSTOM_REPO=$(grep -oP '^-\s*WB_REPOSITORY:\s*\K.*$' /tmp/pr_body.txt | head -1 | tr -d ' \r' || true)" >> $GITHUB_ENV |
| 673 | + echo "WB_CUSTOM_BRANCH=$(grep -oP '^-\s*WB_BRANCH:\s*\K.*$' /tmp/pr_body.txt | head -1 | tr -d ' \r' || true)" >> $GITHUB_ENV |
| 674 | + else |
| 675 | + echo "WB_CUSTOM_REPO=${{ github.event.inputs.wb_repository }}" >> $GITHUB_ENV |
| 676 | + echo "WB_CUSTOM_BRANCH=${{ github.event.inputs.wb_branch }}" >> $GITHUB_ENV |
| 677 | + fi |
| 678 | +
|
| 679 | + - name: Build custom WaterButler image |
| 680 | + if: env.WB_CUSTOM_BRANCH != '' |
| 681 | + run: | |
| 682 | + WB_REPO="${WB_CUSTOM_REPO:-RCOSDP/RDM-waterbutler}" |
| 683 | + WB_BRANCH="${WB_CUSTOM_BRANCH}" |
| 684 | + WB_BASE_BRANCH="develop" |
| 685 | +
|
| 686 | + echo "Building custom WaterButler image from ${WB_REPO}@${WB_BRANCH}" |
| 687 | +
|
| 688 | + # Clone base branch |
| 689 | + git clone --depth=50 -b "$WB_BASE_BRANCH" "https://github.com/${WB_REPO}.git" RDM-waterbutler |
| 690 | + cd RDM-waterbutler |
| 691 | +
|
| 692 | + # Merge custom branch |
| 693 | + git fetch origin "$WB_BRANCH" |
| 694 | + git config user.name "github-actions[bot]" |
| 695 | + git config user.email "RDM-e2e-test-nb@example.com" |
| 696 | + git merge --no-ff FETCH_HEAD -m "Merge ${WB_BRANCH} for E2E tests" |
| 697 | +
|
| 698 | + # Build Docker image |
| 699 | + docker build -t rdm-waterbutler:custom . |
| 700 | + cd .. |
| 701 | +
|
| 702 | + # Override WB_IMAGE for subsequent steps |
| 703 | + echo "WB_IMAGE=rdm-waterbutler:custom" >> $GITHUB_ENV |
| 704 | + echo "Custom WaterButler image built successfully" |
| 705 | +
|
642 | 706 | - name: Create docker-compose override for NII Cloud Operation images |
643 | 707 | working-directory: RDM-osf.io |
644 | 708 | run: | |
@@ -668,22 +732,31 @@ jobs: |
668 | 732 | echo "TLJH_PLUGIN_OVERRIDE=$TLJH_PLUGIN_OVERRIDE" >> $GITHUB_ENV |
669 | 733 | echo "TLJH_REPO2DOCKER_IMAGE_OVERRIDE=$TLJH_REPO2DOCKER_IMAGE_OVERRIDE" >> $GITHUB_ENV |
670 | 734 | echo "TLJH_RDMFS_IMAGE_OVERRIDE=$TLJH_RDMFS_IMAGE_OVERRIDE" >> $GITHUB_ENV |
671 | | - |
| 735 | +
|
672 | 736 | # Use overrides if found, otherwise defaults |
| 737 | + # If WB_IMAGE was set by "Build custom WaterButler image" step, use it |
673 | 738 | export OSF_IMAGE="${OSF_OVERRIDE:-niicloudoperation/rdm-osf.io:latest}" |
674 | 739 | export EMBER_IMAGE="${EMBER_OVERRIDE:-niicloudoperation/rdm-ember-osf-web:latest}" |
675 | 740 | export CAS_IMAGE="${CAS_OVERRIDE:-niicloudoperation/rdm-cas-overlay:latest}" |
676 | 741 | export MFR_IMAGE="${MFR_OVERRIDE:-niicloudoperation/rdm-modular-file-renderer:latest}" |
677 | | - export WB_IMAGE="${WB_OVERRIDE:-niicloudoperation/rdm-waterbutler:latest}" |
| 742 | + if [[ -n "$WB_IMAGE" ]]; then |
| 743 | + export WB_IMAGE |
| 744 | + else |
| 745 | + export WB_IMAGE="${WB_OVERRIDE:-niicloudoperation/rdm-waterbutler:latest}" |
| 746 | + fi |
678 | 747 | else |
679 | 748 | # Use workflow dispatch inputs or defaults |
680 | 749 | export OSF_IMAGE="${{ github.event.inputs.osf_image || 'niicloudoperation/rdm-osf.io:latest' }}" |
681 | 750 | export EMBER_IMAGE="${{ github.event.inputs.ember_image || 'niicloudoperation/rdm-ember-osf-web:latest' }}" |
682 | 751 | export CAS_IMAGE="${{ github.event.inputs.cas_image || 'niicloudoperation/rdm-cas-overlay:latest' }}" |
683 | 752 | export MFR_IMAGE="${{ github.event.inputs.mfr_image || 'niicloudoperation/rdm-modular-file-renderer:latest' }}" |
684 | | - export WB_IMAGE="${{ github.event.inputs.wb_image || 'niicloudoperation/rdm-waterbutler:latest' }}" |
| 753 | + if [[ -n "$WB_IMAGE" ]]; then |
| 754 | + export WB_IMAGE |
| 755 | + else |
| 756 | + export WB_IMAGE="${{ github.event.inputs.wb_image || 'niicloudoperation/rdm-waterbutler:latest' }}" |
| 757 | + fi |
685 | 758 | fi |
686 | | - |
| 759 | +
|
687 | 760 | source ${{ github.workspace }}/e2e-tests/.github/scripts/setup_rdm.sh |
688 | 761 | create_docker_override |
689 | 762 |
|
@@ -786,6 +859,72 @@ jobs: |
786 | 859 | echo "S3COMPAT_ENDPOINT=${MINIO_ENDPOINT}" >> $GITHUB_ENV |
787 | 860 | echo "S3COMPAT_SERVICE_NAME=${MINIO_SERVICE_NAME}" >> $GITHUB_ENV |
788 | 861 |
|
| 862 | + - name: Initialize MinIO for S3CompatSigV4 tests |
| 863 | + if: env.MINIO_ENABLED == 'true' && (env.S3COMPATSIGV4_ENABLED == 'true' || env.S3COMPATSIGV4_INST_ENABLED == 'true') |
| 864 | + working-directory: e2e-tests |
| 865 | + run: | |
| 866 | + set -eu |
| 867 | +
|
| 868 | + key_part() { |
| 869 | + LC_ALL=C tr -dc 'a-z0-9' < /dev/urandom | head -c 18 |
| 870 | + } |
| 871 | +
|
| 872 | + secret_part() { |
| 873 | + LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 40 |
| 874 | + } |
| 875 | +
|
| 876 | + BUCKET_PREFIX="ci-${GITHUB_RUN_ID:-0}-${GITHUB_RUN_ATTEMPT:-0}-sigv4" |
| 877 | +
|
| 878 | + if [ "${S3COMPATSIGV4_ENABLED}" = "true" ]; then |
| 879 | + ACCESS_KEY_1="ci$(key_part)" |
| 880 | + SECRET_KEY_1="$(secret_part)" |
| 881 | + ACCESS_KEY_2="ci$(key_part)" |
| 882 | + SECRET_KEY_2="$(secret_part)" |
| 883 | +
|
| 884 | + BUCKET_NAME_1="${BUCKET_PREFIX}-a" |
| 885 | + BUCKET_NAME_2="${BUCKET_PREFIX}-b" |
| 886 | +
|
| 887 | + .github/scripts/setup_minio_buckets.sh \ |
| 888 | + ../RDM-osf.io \ |
| 889 | + "${MINIO_ALIAS}" \ |
| 890 | + "${MINIO_ENDPOINT}" \ |
| 891 | + "${MINIO_ROOT_USER}" \ |
| 892 | + "${MINIO_ROOT_PASSWORD}" \ |
| 893 | + "${ACCESS_KEY_1}" "${SECRET_KEY_1}" "${BUCKET_NAME_1}" \ |
| 894 | + "${ACCESS_KEY_2}" "${SECRET_KEY_2}" "${BUCKET_NAME_2}" |
| 895 | +
|
| 896 | + echo "S3COMPATSIGV4_ACCESS_KEY_1=${ACCESS_KEY_1}" >> $GITHUB_ENV |
| 897 | + echo "S3COMPATSIGV4_SECRET_KEY_1=${SECRET_KEY_1}" >> $GITHUB_ENV |
| 898 | + echo "S3COMPATSIGV4_ACCESS_KEY_2=${ACCESS_KEY_2}" >> $GITHUB_ENV |
| 899 | + echo "S3COMPATSIGV4_SECRET_KEY_2=${SECRET_KEY_2}" >> $GITHUB_ENV |
| 900 | + echo "S3COMPATSIGV4_BUCKET_NAME_1=${BUCKET_NAME_1}" >> $GITHUB_ENV |
| 901 | + echo "S3COMPATSIGV4_BUCKET_NAME_2=${BUCKET_NAME_2}" >> $GITHUB_ENV |
| 902 | + echo "S3COMPATSIGV4_ENDPOINT=${MINIO_ENDPOINT}" >> $GITHUB_ENV |
| 903 | + echo "S3COMPATSIGV4_SERVICE_NAME=${MINIO_SERVICE_NAME}" >> $GITHUB_ENV |
| 904 | + fi |
| 905 | +
|
| 906 | + if [ "${S3COMPATSIGV4_INST_ENABLED}" = "true" ]; then |
| 907 | + INST_ACCESS_KEY="ci$(key_part)" |
| 908 | + INST_SECRET_KEY="$(secret_part)" |
| 909 | + INST_BUCKET="${BUCKET_PREFIX}-inst" |
| 910 | + # Second bucket is required by setup_minio_buckets.sh but not used for inst storage |
| 911 | + INST_BUCKET_DUMMY="${BUCKET_PREFIX}-inst2" |
| 912 | +
|
| 913 | + .github/scripts/setup_minio_buckets.sh \ |
| 914 | + ../RDM-osf.io \ |
| 915 | + "${MINIO_ALIAS}" \ |
| 916 | + "${MINIO_ENDPOINT}" \ |
| 917 | + "${MINIO_ROOT_USER}" \ |
| 918 | + "${MINIO_ROOT_PASSWORD}" \ |
| 919 | + "${INST_ACCESS_KEY}" "${INST_SECRET_KEY}" "${INST_BUCKET}" \ |
| 920 | + "${INST_ACCESS_KEY}" "${INST_SECRET_KEY}" "${INST_BUCKET_DUMMY}" |
| 921 | +
|
| 922 | + echo "S3COMPATSIGV4_INST_ACCESS_KEY=${INST_ACCESS_KEY}" >> $GITHUB_ENV |
| 923 | + echo "S3COMPATSIGV4_INST_SECRET_KEY=${INST_SECRET_KEY}" >> $GITHUB_ENV |
| 924 | + echo "S3COMPATSIGV4_INST_BUCKET=${INST_BUCKET}" >> $GITHUB_ENV |
| 925 | + echo "S3COMPATSIGV4_INST_ENDPOINT=${MINIO_ENDPOINT}" >> $GITHUB_ENV |
| 926 | + fi |
| 927 | +
|
789 | 928 | - name: Start MinIO trace |
790 | 929 | if: env.MINIO_ENABLED == 'true' |
791 | 930 | working-directory: RDM-osf.io |
@@ -1007,6 +1146,12 @@ jobs: |
1007 | 1146 | if [ "${FLOWABLE_ENABLED}" = "true" ]; then |
1008 | 1147 | args+=(--flowable) |
1009 | 1148 | fi |
| 1149 | + if [ "${S3COMPATSIGV4_ENABLED}" = "true" ]; then |
| 1150 | + args+=(--s3compatsigv4) |
| 1151 | + fi |
| 1152 | + if [ "${S3COMPATSIGV4_INST_ENABLED}" = "true" ]; then |
| 1153 | + args+=(--s3compatsigv4-inst) |
| 1154 | + fi |
1010 | 1155 |
|
1011 | 1156 | .github/scripts/generate_ci_config.sh "${args[@]}" |
1012 | 1157 | rm base_ci.config.yaml |
|
0 commit comments