From 5f912688749061953fc9cd18aa4b9e354c08cb4e Mon Sep 17 00:00:00 2001 From: "Markus Kitsinger (SwooshyCueb)" Date: Tue, 3 Feb 2026 11:05:24 -0600 Subject: [PATCH 1/4] [irods/irods_7838] Remove GHA workflow for EL7 --- .github/workflows/build-irods-centos.yml | 45 ------------------------ 1 file changed, 45 deletions(-) delete mode 100644 .github/workflows/build-irods-centos.yml diff --git a/.github/workflows/build-irods-centos.yml b/.github/workflows/build-irods-centos.yml deleted file mode 100644 index 6d3be80..0000000 --- a/.github/workflows/build-irods-centos.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: build-irods-centos -on: [push, pull_request] -jobs: - build: - name: ${{ matrix.container }} - runs-on: ubuntu-latest - container: ${{ matrix.container }} - strategy: - matrix: - container: ['centos:7'] - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - name: Install Prerequisites - run: | - yum -y update ca-certificates - yum -y install bind-utils wget epel-release - yum -y install gcc g++ libstdc++-static make rpm-build bzip2-devel curl-devel fakeroot openssl-devel pam-devel python-devel unixODBC unixODBC-devel zlib-devel python36-distro - - name: Install iRODS Externals - run: | - rpm --import https://unstable.irods.org/irods-unstable-signing-key.asc - wget -qO - https://unstable.irods.org/renci-irods-unstable.yum.repo | tee /etc/yum.repos.d/renci-irods-unstable.yum.repo - yum -y update - yum -y install \ - irods-externals-avro1.11.0-1 \ - irods-externals-boost1.78.0-0 \ - irods-externals-catch22.13.8-0 \ - irods-externals-clang-runtime13.0.0-0 \ - irods-externals-clang13.0.0-0 \ - irods-externals-cmake3.21.4-0 \ - irods-externals-cppzmq4.8.1-1 \ - irods-externals-fmt8.1.1-0 \ - irods-externals-json3.10.4-0 \ - irods-externals-libarchive3.5.2-0 \ - irods-externals-nanodbc2.13.0-1 \ - irods-externals-spdlog1.9.2-1 \ - irods-externals-zeromq4-14.1.8-0 - yum -y install irods-devel - - name: Build and Package - run: | - export PATH=/opt/irods-externals/cmake3.21.4-0/bin:$PATH - mkdir build - cd build - cmake .. - make From 1d7f7720543663935d155b9d2315a118173a4bab Mon Sep 17 00:00:00 2001 From: "Markus Kitsinger (SwooshyCueb)" Date: Tue, 3 Feb 2026 11:08:34 -0600 Subject: [PATCH 2/4] [irods/irods_6008] Use reusable workflows for clang-tidy and clang-format GHAs --- .../workflows/linter-irods-clang-format.yml | 46 +-------- .github/workflows/linter-irods-clang-tidy.yml | 99 ++----------------- 2 files changed, 12 insertions(+), 133 deletions(-) diff --git a/.github/workflows/linter-irods-clang-format.yml b/.github/workflows/linter-irods-clang-format.yml index 57b705a..35c76b5 100644 --- a/.github/workflows/linter-irods-clang-format.yml +++ b/.github/workflows/linter-irods-clang-format.yml @@ -1,47 +1,11 @@ -name: linter-irods-clang-format +name: Check Formatting + on: pull_request + defaults: run: shell: bash + jobs: clang-format: - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v3 - with: - # Get all history for the repository (branches, tags, etc). - # This is required in order for clang-format to work correctly. - fetch-depth: 0 - - name: Install Prerequisites - run: | - sudo apt-get update -qq - sudo apt-get install -qq apt-transport-https ca-certificates - sudo apt-get install -qq wget - - name: Install Clang Compiler - run: | - wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | sudo apt-key add - - echo "deb [arch=amd64] https://unstable.irods.org/apt/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/renci-irods-unstable.list - sudo apt-get update -qq - sudo apt-get install -qq irods-externals-clang13.0.0-0 - - name: Run Clang-Format - run: | - # Make clang-format available. - export PATH=/opt/irods-externals/clang13.0.0-0/bin:$PATH - - # Configure Git so that "git clang-format" can be run. - git config --global clangFormat.binary clang-format - git config --global clangFormat.style file - git config --global clangFormat.extensions 'h,c,hpp,cpp,tpp' - - # Diff the target branch with all changes made within the pull request. - diff_output=$(git clang-format --diff origin/$GITHUB_BASE_REF) - - if [[ "$diff_output" == *"no modified files to format"* ]] || [[ "$diff_output" == *"clang-format did not modify any files"* ]]; then - echo "Source code is properly formatted."; - exit 0 - else - echo "Source code needs to be formatted!"; - echo "$diff_output" - exit 1 - fi + uses: irods/irods_reusable_github_workflows/.github/workflows/linter-irods-clang-format.yml@main diff --git a/.github/workflows/linter-irods-clang-tidy.yml b/.github/workflows/linter-irods-clang-tidy.yml index 5c7fd71..0926cc3 100644 --- a/.github/workflows/linter-irods-clang-tidy.yml +++ b/.github/workflows/linter-irods-clang-tidy.yml @@ -1,98 +1,13 @@ -name: linter-irods-clang-tidy +name: Run Static Analysis Checks + on: pull_request + defaults: run: shell: bash + jobs: clang-tidy: - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v3 - with: - # Get all history for the repository (branches, tags, etc). - # This is required in order for clang-tidy to work correctly. - fetch-depth: 0 - - name: Install Prerequisites - run: | - sudo apt-get update -qq - sudo apt-get install -qq apt-transport-https ca-certificates - sudo apt-get install -qq \ - wget \ - curl \ - g++ \ - make \ - python-dev \ - unixodbc \ - libcurl4-gnutls-dev \ - libbz2-dev \ - zlib1g-dev \ - libpam0g-dev \ - libssl-dev \ - libxml2-dev \ - unixodbc-dev \ - python-psutil \ - super \ - odbc-postgresql \ - libkrb5-dev \ - python3-distro - - name: Install libstdc++6 - run: | - sudo apt-get install -qq software-properties-common - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get update -qq - sudo apt-get install -qq libstdc++6 - - name: Install iRODS Externals - run: | - wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | sudo apt-key add - - echo "deb [arch=amd64] https://unstable.irods.org/apt/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/renci-irods-unstable.list - sudo apt-get update -qq - sudo apt-get install -qq \ - irods-externals-avro1.11.0-1 \ - irods-externals-boost1.78.0-0 \ - irods-externals-catch22.13.8-0 \ - irods-externals-clang-runtime13.0.0-0 \ - irods-externals-clang13.0.0-0 \ - irods-externals-cmake3.21.4-0 \ - irods-externals-cppzmq4.8.1-1 \ - irods-externals-fmt8.1.1-0 \ - irods-externals-json3.10.4-0 \ - irods-externals-libarchive3.5.2-0 \ - irods-externals-nanodbc2.13.0-1 \ - irods-externals-spdlog1.9.2-1 \ - irods-externals-zeromq4-14.1.8-0 - - name: Configure CMake - run: | - export PATH=/opt/irods-externals/cmake3.21.4-0/bin:$PATH - mkdir build - cd build - cmake .. - - name: Run Clang-Tidy - run: | - # Make clang and clang-tidy available. - export PATH=/opt/irods-externals/clang13.0.0-0/bin:$PATH - export PATH=/opt/irods-externals/clang13.0.0-0/share/clang:$PATH - - # Run clang-tidy on the changes. - git diff -U0 origin/$GITHUB_BASE_REF | \ - clang-tidy-diff.py -p1 -path build/compile_commands.json -quiet | \ - tee clang_tidy_output.txt - - # Return a failure if the output contains a clang-tidy error or warning. - # clang-tidy-diff.py doesn't report a non-zero error code when it finds violations. - clang_tidy_text=$(cat clang_tidy_output.txt) - if [[ "$clang_tidy_text" == *": error: "* ]] || [[ "$clang_tidy_text" == *": warning: "* ]]; then - echo 'Source code needs some attention!' - echo - echo 'If the results are hard to follow, you can enable color by running the following command at the bench:' - echo - echo " git diff -U0 $GITHUB_BASE_REF | clang-tidy-diff.py -p1 -use-color -path /path/to/build/compile_commands.json -quiet" - echo - echo 'This command only works while the branch associated with this pull request is checked out.' - echo - - exit 1 - fi - - echo "Source code is tidy :-)" - + uses: irods/irods_reusable_github_workflows/.github/workflows/linter-irods-clang-tidy.yml@main + with: + install_irods_development_package: true From 086b55ac5d3129a639fa4197dd012187c22de568 Mon Sep 17 00:00:00 2001 From: "Markus Kitsinger (SwooshyCueb)" Date: Tue, 3 Feb 2026 11:10:58 -0600 Subject: [PATCH 3/4] [irods/irods_6008] Use reusable workflows for build/test GHAs --- ...ld-and-test-plugin-with-irods-packages.yml | 11 ++++ .github/workflows/build-and-test-plugin.yml | 11 ++++ .github/workflows/build-irods-debian.yml | 44 ---------------- .../build-irods-enterprise-linux.yml | 46 ----------------- .github/workflows/build-irods-ubuntu.yml | 51 ------------------- 5 files changed, 22 insertions(+), 141 deletions(-) create mode 100644 .github/workflows/build-and-test-plugin-with-irods-packages.yml create mode 100644 .github/workflows/build-and-test-plugin.yml delete mode 100644 .github/workflows/build-irods-debian.yml delete mode 100644 .github/workflows/build-irods-enterprise-linux.yml delete mode 100644 .github/workflows/build-irods-ubuntu.yml diff --git a/.github/workflows/build-and-test-plugin-with-irods-packages.yml b/.github/workflows/build-and-test-plugin-with-irods-packages.yml new file mode 100644 index 0000000..fb259df --- /dev/null +++ b/.github/workflows/build-and-test-plugin-with-irods-packages.yml @@ -0,0 +1,11 @@ +name: build-and-test-plugin-with-irods-packages + +on: [push, pull_request] + +defaults: + run: + shell: bash + +jobs: + build_and_test_plugin_with_prerelease_packages_using_default_matrix: + uses: irods/irods_reusable_github_workflows/.github/workflows/build-and-test-plugin-with-irods-packages-matrix.yml@main diff --git a/.github/workflows/build-and-test-plugin.yml b/.github/workflows/build-and-test-plugin.yml new file mode 100644 index 0000000..858f09a --- /dev/null +++ b/.github/workflows/build-and-test-plugin.yml @@ -0,0 +1,11 @@ +name: build-and-test-plugin + +on: [push, pull_request] + +defaults: + run: + shell: bash + +jobs: + build_and_test_plugin_using_default_matrix: + uses: irods/irods_reusable_github_workflows/.github/workflows/build-and-test-plugin-matrix.yml@main diff --git a/.github/workflows/build-irods-debian.yml b/.github/workflows/build-irods-debian.yml deleted file mode 100644 index bb8d2d2..0000000 --- a/.github/workflows/build-irods-debian.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: build-irods-debian -on: [push, pull_request] -jobs: - build: - name: ${{ matrix.container }} - runs-on: ubuntu-latest - container: ${{ matrix.container }} - strategy: - matrix: - container: ['debian:11'] - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - name: Install Prerequisites - run: | - apt-get update -qq - apt-get install -qq apt-transport-https ca-certificates gnupg wget curl g++ make python-dev unixodbc libcurl4-gnutls-dev libbz2-dev zlib1g-dev libpam0g-dev libssl-dev libxml2-dev unixodbc-dev python3-psutil super odbc-postgresql libkrb5-dev python3-distro - - name: Install iRODS Externals - run: | - wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | apt-key add - - echo "deb [arch=amd64] https://unstable.irods.org/apt/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/renci-irods-unstable.list - apt-get update -qq - apt-get install -qq \ - irods-externals-avro1.11.0-1 \ - irods-externals-boost1.78.0-0 \ - irods-externals-catch22.13.8-0 \ - irods-externals-clang-runtime13.0.0-0 \ - irods-externals-clang13.0.0-0 \ - irods-externals-cmake3.21.4-0 \ - irods-externals-cppzmq4.8.1-1 \ - irods-externals-fmt8.1.1-0 \ - irods-externals-json3.10.4-0 \ - irods-externals-libarchive3.5.2-0 \ - irods-externals-nanodbc2.13.0-1 \ - irods-externals-spdlog1.9.2-1 \ - irods-externals-zeromq4-14.1.8-0 - apt-get install -qq irods-dev - - name: Build and Package - run: | - export PATH=/opt/irods-externals/cmake3.21.4-0/bin:$PATH - mkdir build - cd build - cmake .. - make diff --git a/.github/workflows/build-irods-enterprise-linux.yml b/.github/workflows/build-irods-enterprise-linux.yml deleted file mode 100644 index 34a2ed1..0000000 --- a/.github/workflows/build-irods-enterprise-linux.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: build-irods-enterprise-linux -on: [push, pull_request] -jobs: - build: - name: ${{ matrix.container }} - runs-on: ubuntu-latest - container: ${{ matrix.container }} - strategy: - matrix: - container: ['almalinux:8','rockylinux:8'] - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - name: Install Prerequisites - run: | - dnf -y update ca-certificates - dnf -y install bind-utils wget git epel-release - dnf -y install gcc gcc-c++ make rpm-build bzip2-devel curl-devel fakeroot openssl-devel pam-devel python36-devel unixODBC unixODBC-devel zlib-devel python3-distro - - name: Install iRODS Externals - run: | - rpm --import https://unstable.irods.org/irods-unstable-signing-key.asc - wget -qO - https://unstable.irods.org/renci-irods-unstable.yum.repo | tee /etc/yum.repos.d/renci-irods-unstable.yum.repo - sed -i 's/centos/el/' /etc/yum.repos.d/renci-irods-unstable.yum.repo - dnf -y update - dnf -y install \ - irods-externals-avro1.11.0-1 \ - irods-externals-boost1.78.0-0 \ - irods-externals-catch22.13.8-0 \ - irods-externals-clang-runtime13.0.0-0 \ - irods-externals-clang13.0.0-0 \ - irods-externals-cmake3.21.4-0 \ - irods-externals-cppzmq4.8.1-1 \ - irods-externals-fmt8.1.1-0 \ - irods-externals-json3.10.4-0 \ - irods-externals-libarchive3.5.2-0 \ - irods-externals-nanodbc2.13.0-1 \ - irods-externals-spdlog1.9.2-1 \ - irods-externals-zeromq4-14.1.8-0 - dnf -y install irods-devel - - name: Build and Package - run: | - export PATH=/opt/irods-externals/cmake3.21.4-0/bin:$PATH - mkdir build - cd build - cmake .. - make diff --git a/.github/workflows/build-irods-ubuntu.yml b/.github/workflows/build-irods-ubuntu.yml deleted file mode 100644 index d510ed5..0000000 --- a/.github/workflows/build-irods-ubuntu.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: build-irods-ubuntu -on: [push, pull_request] -jobs: - build: - name: ${{ matrix.container }} - runs-on: ubuntu-latest - container: ${{ matrix.container }} - strategy: - matrix: - container: ['ubuntu:18.04','ubuntu:20.04'] - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - name: Install Prerequisites - run: | - apt-get update -qq - apt-get install -qq dnsutils apt-transport-https ca-certificates - apt-get install -qq wget curl g++ make python-dev unixodbc libcurl4-gnutls-dev libbz2-dev zlib1g-dev libpam0g-dev libssl-dev libxml2-dev unixodbc-dev python-psutil super odbc-postgresql libkrb5-dev python3-distro - - name: Install libstdc++6 - run: | - apt-get install -qq software-properties-common - add-apt-repository -y ppa:ubuntu-toolchain-r/test - apt-get update -qq - apt-get install -qq libstdc++6 - - name: Install iRODS Externals - run: | - wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | apt-key add - - echo "deb [arch=amd64] https://unstable.irods.org/apt/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/renci-irods-unstable.list - apt-get update -qq - apt-get install -qq \ - irods-externals-avro1.11.0-1 \ - irods-externals-boost1.78.0-0 \ - irods-externals-catch22.13.8-0 \ - irods-externals-clang-runtime13.0.0-0 \ - irods-externals-clang13.0.0-0 \ - irods-externals-cmake3.21.4-0 \ - irods-externals-cppzmq4.8.1-1 \ - irods-externals-fmt8.1.1-0 \ - irods-externals-json3.10.4-0 \ - irods-externals-libarchive3.5.2-0 \ - irods-externals-nanodbc2.13.0-1 \ - irods-externals-spdlog1.9.2-1 \ - irods-externals-zeromq4-14.1.8-0 - apt-get install -qq irods-dev - - name: Build and Package - run: | - export PATH=/opt/irods-externals/cmake3.21.4-0/bin:$PATH - mkdir build - cd build - cmake .. - make From 39e4e745e919c4ac0665c510587cd6e9b4533040 Mon Sep 17 00:00:00 2001 From: "Markus Kitsinger (SwooshyCueb)" Date: Tue, 3 Feb 2026 13:05:08 -0600 Subject: [PATCH 4/4] [SQUASH] add build/test hooks --- ...rtium_continuous_integration_build_hook.py | 78 +++++++++++++++++++ ...ortium_continuous_integration_test_hook.py | 47 +++++++++++ 2 files changed, 125 insertions(+) create mode 100644 irods_consortium_continuous_integration_build_hook.py create mode 100644 irods_consortium_continuous_integration_test_hook.py diff --git a/irods_consortium_continuous_integration_build_hook.py b/irods_consortium_continuous_integration_build_hook.py new file mode 100644 index 0000000..d432ae6 --- /dev/null +++ b/irods_consortium_continuous_integration_build_hook.py @@ -0,0 +1,78 @@ +from __future__ import print_function + +import glob +import multiprocessing +import optparse +import os +import sys +import tempfile + +import irods_python_ci_utilities + + +def install_building_dependencies(externals_directory): + externals_list = [ + 'irods-externals-boost1.81.0-2', + 'irods-externals-clang16.0.6-0' + ] + if externals_directory == 'None' or externals_directory is None: + irods_python_ci_utilities.install_irods_core_dev_repository() + irods_python_ci_utilities.install_os_packages(externals_list) + else: + package_suffix = irods_python_ci_utilities.get_package_suffix() + os_specific_directory = irods_python_ci_utilities.append_os_specific_directory(externals_directory) + externals = [] + for irods_externals in externals_list: + externals.append(glob.glob(os.path.join(os_specific_directory, irods_externals + '*.{0}'.format(package_suffix)))[0]) + irods_python_ci_utilities.install_os_packages_from_files(externals) + install_os_specific_dependencies() + +def install_os_specific_dependencies_apt(): + irods_python_ci_utilities.install_os_packages(['cmake', 'make']) + +def install_os_specific_dependencies_yum(): + irods_python_ci_utilities.install_os_packages(['cmake', 'make']) + +def install_os_specific_dependencies(): + dispatch_map = { + 'Almalinux': install_os_specific_dependencies_yum, + 'Centos linux': install_os_specific_dependencies_yum, + 'Centos': install_os_specific_dependencies_yum, + 'Debian gnu_linux': install_os_specific_dependencies_apt, + 'Opensuse ': install_os_specific_dependencies_yum, + 'Rocky linux': install_os_specific_dependencies_yum, + 'Ubuntu': install_os_specific_dependencies_apt + } + try: + return dispatch_map[irods_python_ci_utilities.get_distribution()]() + except KeyError: + irods_python_ci_utilities.raise_not_implemented_for_distribution() + +def copy_output_packages(build_directory, output_root_directory): + irods_python_ci_utilities.gather_files_satisfying_predicate( + build_directory, + irods_python_ci_utilities.append_os_specific_directory(output_root_directory), + lambda s:s.endswith(irods_python_ci_utilities.get_package_suffix())) + +def main(build_directory, output_root_directory, irods_packages_root_directory, externals_directory): + install_building_dependencies(externals_directory) + if irods_packages_root_directory: + irods_python_ci_utilities.install_irods_dev_and_runtime_packages(irods_packages_root_directory) + build_directory = os.path.abspath(build_directory or tempfile.mkdtemp(prefix='irods_microservice_msi_rotate_string_build_directory')) + irods_python_ci_utilities.subprocess_get_output(['cmake', os.path.dirname(os.path.realpath(__file__))], check_rc=True, cwd=build_directory) + irods_python_ci_utilities.subprocess_get_output(['make', '-j', str(multiprocessing.cpu_count()), 'package'], check_rc=True, cwd=build_directory) + if output_root_directory: + copy_output_packages(build_directory, output_root_directory) + +if __name__ == '__main__': + parser = optparse.OptionParser() + parser.add_option('--build_directory') + parser.add_option('--output_root_directory') + parser.add_option('--irods_packages_root_directory') + parser.add_option('--externals_packages_directory') + options, _ = parser.parse_args() + + main(options.build_directory, + options.output_root_directory, + options.irods_packages_root_directory, + options.externals_packages_directory) diff --git a/irods_consortium_continuous_integration_test_hook.py b/irods_consortium_continuous_integration_test_hook.py new file mode 100644 index 0000000..9c29d71 --- /dev/null +++ b/irods_consortium_continuous_integration_test_hook.py @@ -0,0 +1,47 @@ +from __future__ import print_function + +import optparse +import os +import shutil +import glob + +import irods_python_ci_utilities + +def main(): + parser = optparse.OptionParser() + parser.add_option('--output_root_directory') + parser.add_option('--built_packages_root_directory') + parser.add_option('--test', metavar='dotted name') + parser.add_option('--skip-setup', action='store_false', dest='do_setup', default=True) + options, _ = parser.parse_args() + + built_packages_root_directory = options.built_packages_root_directory + package_suffix = irods_python_ci_utilities.get_package_suffix() + os_specific_directory = irods_python_ci_utilities.append_os_specific_directory(built_packages_root_directory) + + if options.do_setup: + irods_python_ci_utilities.install_os_packages_from_files( + glob.glob(os.path.join(os_specific_directory, + f'irods-microservice-msi_rotate_string*.{package_suffix}') + ) + ) + + install_test_prerequisites() + + test = options.test or 'test_project_template_cpp_microservice' + + try: + test_output_file = 'log/test_output.log' + irods_python_ci_utilities.subprocess_get_output(['sudo', 'su', '-', 'irods', '-c', + f'python3 scripts/run_tests.py --xml_output --run_s {test} 2>&1 | tee {test_output_file}; exit $PIPESTATUS'], + check_rc=True) + finally: + output_root_directory = options.output_root_directory + if output_root_directory: + irods_python_ci_utilities.gather_files_satisfying_predicate('/var/lib/irods/log', output_root_directory, lambda x: True) + shutil.copy('/var/lib/irods/log/test_output.log', output_root_directory) + #shutil.copytree('/var/lib/irods/test-reports', os.path.join(output_root_directory, 'test-reports')) + + +if __name__ == '__main__': + main()