Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
631d3f5
Add scripts to configure sccache-dist and use the build cluster in CI
trxcllnt Apr 12, 2025
b87e1e7
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt Apr 14, 2025
a72407d
Merge branch 'branch-25.06' into fea/use-sccache-build-cluster
trxcllnt Apr 16, 2025
3932245
remove -DCMAKE_POLICY_VERSION_MINIMUM=3.5
trxcllnt Apr 16, 2025
1de075e
temporarily use my cuspatial fork
trxcllnt Apr 16, 2025
36ad779
remove cub and thrust namespace mangling flags
trxcllnt Apr 17, 2025
8b60e23
cpu8 -> cpu4
trxcllnt Apr 17, 2025
e07b0dd
test shared-workflows fea/devcontainers-job-timeout changes
trxcllnt Apr 17, 2025
5c138aa
rename SCCACHE_DIST_SCHEDULER_URL to SCCACHE_DIST_URL
trxcllnt Apr 17, 2025
ace1e27
use cpu8 again, clone with --depth 1
trxcllnt Apr 17, 2025
5978e0d
cleanup
trxcllnt Apr 21, 2025
7f8b878
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt Apr 22, 2025
fef88ec
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt Apr 22, 2025
cc2a032
remove -l from ninja args and bump feature versions
trxcllnt Apr 22, 2025
622a5af
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt Apr 23, 2025
31436cf
switch back to shared-workflows@branch-25.06
trxcllnt Apr 30, 2025
b126fd1
revert cuspatial chnage in manifest.yaml
trxcllnt May 1, 2025
3cf4f74
pass -q option to `git branch --remotes -d`
trxcllnt May 1, 2025
c86444a
print messages before doing stuff
trxcllnt May 2, 2025
0ab02c4
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt May 2, 2025
4f767f4
ensure the gh cli user is refreshed if the build cluster is enabled b…
trxcllnt May 2, 2025
7933911
cleanup
trxcllnt May 2, 2025
9285ac5
log output
trxcllnt May 3, 2025
471307c
be safer when constructing command args
trxcllnt May 3, 2025
92d25ad
don't background rapids-generate-scripts
trxcllnt May 3, 2025
a34964f
fix typo
trxcllnt May 3, 2025
32f7a2a
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt May 6, 2025
57ed8fb
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt May 6, 2025
c8659ac
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt May 7, 2025
bd8d712
default -j with no value to hard nofile limit in configure and build …
trxcllnt May 8, 2025
04001cc
enable sccache keepalive
trxcllnt May 10, 2025
2eb515f
Merge branch 'branch-25.06' of github.com:rapidsai/devcontainers into…
trxcllnt May 13, 2025
8b67e4b
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt May 23, 2025
998cdc3
Merge branch 'branch-25.08' into fea/use-sccache-build-cluster
trxcllnt May 23, 2025
0bded8d
switch from gha-runners.nvidia.com to rapids.nvidia.com
trxcllnt Jun 11, 2025
27cf62e
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jun 11, 2025
2774d6f
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jun 26, 2025
abd6d4f
enable and configure sccache-dist by default
trxcllnt Jun 30, 2025
825192e
set RMM's default branch to main, fix devcontainer-utils tests
trxcllnt Jun 30, 2025
a7a960c
use cpu4 runners
trxcllnt Jul 1, 2025
84ba6a3
cpu4 -> cpu8
trxcllnt Jul 1, 2025
9b00a04
remove SCCACHE_S3_KEY_PREFIX
trxcllnt Jul 1, 2025
e1adb33
default to rapidsai/sccache
trxcllnt Jul 2, 2025
2d5e5c7
switch back to rapidsai/shared-workflows@branch-25.08
trxcllnt Jul 2, 2025
2aa0507
switch back to cp -n
trxcllnt Jul 2, 2025
b21ad62
use ninja v1.12.1
trxcllnt Jul 2, 2025
04d23fb
recache
trxcllnt Jul 3, 2025
cf7347f
don't recache
trxcllnt Jul 3, 2025
c976bb5
rapids-get-cmake-build-dir should default to the latest build if no C…
trxcllnt Jul 3, 2025
bf9b96d
build C++ and Python separately, use ninja -j0 in CI, revert to defau…
trxcllnt Jul 3, 2025
3842d4e
translate -j0 to -j$(ulimit -Hn) for `cmake --build`
trxcllnt Jul 3, 2025
43a29b5
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jul 3, 2025
63adf3a
fix build-all-{cpp,python}
trxcllnt Jul 5, 2025
551e947
recache
trxcllnt Jul 5, 2025
745b501
Revert "recache"
trxcllnt Jul 5, 2025
af6851c
remove --compress-mode and -static-global-template-stub from clangd args
trxcllnt Jul 6, 2025
159a6c6
measure CI build times on 32-core runners with sccache disabled
trxcllnt Jul 7, 2025
7b6c3ed
measure CI build times on 8-core runners with sccache-dist
trxcllnt Jul 7, 2025
4c64bbf
copy common scripts
trxcllnt Jul 8, 2025
aae691b
measure CI build times on 8-core runners with sccache and sccache-dist
trxcllnt Jul 8, 2025
fe7b0b2
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jul 11, 2025
7e1d334
use rmm branch-25.08 again
trxcllnt Jul 11, 2025
4dcff98
remove dead code
trxcllnt Jul 16, 2025
91f03d2
support repo dependency_keys in manifest.yaml
trxcllnt Jul 16, 2025
863855d
add clean-all-{cpp,python} scripts
trxcllnt Jul 18, 2025
28ae9aa
fallback to SCCACHE_VERSION and SCCACHE_REPOSITORY envvars
trxcllnt Jul 18, 2025
775a82a
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jul 18, 2025
29a6b8a
-j128
trxcllnt Jul 19, 2025
4fe00e5
lower nofile ulimits
trxcllnt Jul 19, 2025
d15e6e0
background rapids-merge-compile-commands-json call
trxcllnt Jul 21, 2025
78c5254
fix typo
trxcllnt Jul 21, 2025
e94b573
set process nofile ulimit again
trxcllnt Jul 21, 2025
d075ae6
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jul 21, 2025
b315758
bump devcontainer feature version
trxcllnt Jul 21, 2025
ad09243
test always uploading sccache client logs
trxcllnt Jul 21, 2025
9acb5dd
print memory usage every 1s
trxcllnt Jul 21, 2025
04eb45b
Fix bash race conditions in rapids-make-{conda,pip}-dependencies
trxcllnt Jul 22, 2025
4b0e12f
Merge branch 'fix/rapids-make-env-races' into fea/use-sccache-build-c…
trxcllnt Jul 22, 2025
723f2ee
update devcontainer feature version
trxcllnt Jul 22, 2025
de87de9
increase nofile ulimit to 500k
trxcllnt Jul 22, 2025
0ab78bd
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jul 22, 2025
3f1df88
Revert "print memory usage every 1s"
trxcllnt Jul 22, 2025
fc2a498
use the connection pool
trxcllnt Jul 22, 2025
f1bb107
fix rapids-make-pip-dependencies with -r flag
trxcllnt Jul 23, 2025
9e7512f
use files again instead of a fifo
trxcllnt Jul 23, 2025
d443366
don't use connection pooling
trxcllnt Jul 30, 2025
b4ae283
persist the preprocessor cache across runs
trxcllnt Jul 30, 2025
606d7b7
Merge branch 'branch-25.08' of github.com:rapidsai/devcontainers into…
trxcllnt Jul 30, 2025
b48f584
recache
trxcllnt Jul 31, 2025
5b41354
Revert "recache"
trxcllnt Aug 1, 2025
9971b28
extract find_version_from_git_tags into separate file
trxcllnt Aug 5, 2025
c58127f
Merge branch 'branch-25.10' of github.com:rapidsai/devcontainers into…
trxcllnt Aug 5, 2025
71f8f39
make find_version_from_git_tags filter for the next tag after a previ…
trxcllnt Aug 5, 2025
319129a
fix shell init script for nvhpc25.7
trxcllnt Aug 7, 2025
1e2c5ff
Merge branch 'branch-25.10' of github.com:rapidsai/devcontainers into…
trxcllnt Aug 7, 2025
f215b07
Revert "fix shell init script for nvhpc25.7"
trxcllnt Aug 8, 2025
7d88444
fix shell init script for nvhpc25.7
trxcllnt Aug 9, 2025
3413f8f
Merge branch 'branch-25.10' of github.com:rapidsai/devcontainers into…
trxcllnt Aug 9, 2025
77fe8c1
switch back to shared-workflows branch-25.10
trxcllnt Aug 11, 2025
dccfebc
tee build times out to /var/log
trxcllnt Aug 2, 2025
e1b8de2
print build times at the end
trxcllnt Aug 11, 2025
768745b
remove SCCACHE_S3_KEY_PREFIX
trxcllnt Aug 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .devcontainer/cuda12.9-conda/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
"runArgs": [
"--rm",
"--name",
"${localEnv:USER:anon}-rapids-${localWorkspaceFolderBasename}-25.10-cuda12.9-conda"
"${localEnv:USER:anon}-rapids-${localWorkspaceFolderBasename}-25.10-cuda12.9-conda",
"--ulimit",
"nofile=500000"
],
"hostRequirements": {"gpu": "optional"},
"features": {
Expand Down
4 changes: 3 additions & 1 deletion .devcontainer/cuda12.9-pip/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
"runArgs": [
"--rm",
"--name",
"${localEnv:USER:anon}-rapids-${localWorkspaceFolderBasename}-25.10-cuda12.9-pip"
"${localEnv:USER:anon}-rapids-${localWorkspaceFolderBasename}-25.10-cuda12.9-pip",
"--ulimit",
"nofile=500000"
],
"hostRequirements": {"gpu": "optional"},
"features": {
Expand Down
35 changes: 31 additions & 4 deletions .devcontainer/rapids.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ ENV DEFAULT_CONDA_ENV=rapids

FROM ${PYTHON_PACKAGE_MANAGER}-base

ARG TARGETARCH

ARG CUDA
ENV CUDAARCHS="RAPIDS"
ENV CUDA_VERSION="${CUDA_VERSION:-${CUDA}}"
Expand All @@ -41,11 +43,36 @@ ENV PYTHONSAFEPATH="1"
ENV PYTHONUNBUFFERED="1"
ENV PYTHONDONTWRITEBYTECODE="1"

ENV HISTFILE="/home/coder/.cache/._bash_history"
ENV LIBCUDF_KERNEL_CACHE_PATH="/home/coder/cudf/cpp/build/${PYTHON_PACKAGE_MANAGER}/cuda-${CUDA_VERSION}/latest/jitify_cache"

###
# sccache configuration
###
ENV AWS_ROLE_ARN="arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs"
ENV SCCACHE_REGION="us-east-2"
ENV SCCACHE_BUCKET="rapids-sccache-devs"
ENV SCCACHE_IDLE_TIMEOUT=900
ENV AWS_ROLE_ARN="arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs"
# 2hr (1 minute longer than sccache-dist request timeout)
ENV SCCACHE_IDLE_TIMEOUT=7200

ENV HISTFILE="/home/coder/.cache/._bash_history"
###
# sccache-dist configuration
###
# Enable sccache-dist by default
ENV DEVCONTAINER_UTILS_ENABLE_SCCACHE_DIST=1
# Compile locally if max retries exceeded
ENV SCCACHE_DIST_FALLBACK_TO_LOCAL_COMPILE=true
# Retry transient errors 4 times (for a total of 5 attempts)
ENV SCCACHE_DIST_MAX_RETRIES=4
ENV SCCACHE_DIST_CONNECT_TIMEOUT=30
ENV SCCACHE_DIST_CONNECTION_POOL=false
# 1hr 59min (to accommodate debug builds)
ENV SCCACHE_DIST_REQUEST_TIMEOUT=7140
ENV SCCACHE_DIST_KEEPALIVE_ENABLED=true
ENV SCCACHE_DIST_KEEPALIVE_INTERVAL=20
ENV SCCACHE_DIST_KEEPALIVE_TIMEOUT=600
ENV SCCACHE_DIST_URL="https://${TARGETARCH}.linux.sccache.rapids.nvidia.com"

ENV LIBCUDF_KERNEL_CACHE_PATH="/home/coder/cudf/cpp/build/${PYTHON_PACKAGE_MANAGER}/cuda-${CUDA_VERSION}/latest/jitify_cache"
# Build as much in parallel as possible
ENV INFER_NUM_DEVICE_ARCHITECTURES=1
ENV MAX_DEVICE_OBJ_TO_COMPILE_IN_PARALLEL=20
2 changes: 2 additions & 0 deletions .github/actions/build-and-test-feature/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ inputs:
aws_role_arn: {type: string, defaut: '', required: false}
rw_sccache_bucket: {type: string, defaut: '', required: false}
rw_sccache_region: {type: string, defaut: '', required: false}
sccache_dist_scheduler_url: {type: string, defaut: '', required: false}

runs:
using: composite
Expand All @@ -32,3 +33,4 @@ runs:
aws_role_arn: "${{ inputs.aws_role_arn }}"
rw_sccache_bucket: "${{ inputs.rw_sccache_bucket }}"
rw_sccache_region: "${{ inputs.rw_sccache_region }}"
sccache_dist_scheduler_url: "${{ inputs.sccache_dist_scheduler_url }}"
54 changes: 38 additions & 16 deletions .github/workflows/build-all-rapids-repos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,26 +37,48 @@ jobs:
with:
arch: '["amd64", "arm64"]'
cuda: '["12.9"]'
node_type: cpu32
node_type: cpu8
extra-repo-deploy-key: CUMLPRIMS_SSH_PRIVATE_DEPLOY_KEY
rapids-aux-secret-1: GIST_REPO_READ_ORG_GITHUB_TOKEN
timeout-minutes: 720
# Prevent the sccache server from shutting down
# 1. Infinitely retry transient errors
# 2. Enable debug logging to track cache misses
# 3. Never fallback to locally compiling
# 4. Use RAPIDS_AUX_SECRET_1 as the sccache-dist auth token
env: |
CONDA_ENV_CREATE_QUIET=1
SCCACHE_IDLE_TIMEOUT=0
SCCACHE_DIST_MAX_RETRIES=inf
SCCACHE_SERVER_LOG=sccache=debug
SCCACHE_DIST_FALLBACK_TO_LOCAL_COMPILE=false
SCCACHE_DIST_AUTH_TOKEN_VAR=RAPIDS_AUX_SECRET_1
build_command: |
SCCACHE_NO_DAEMON=1 sccache --stop-server
sccache -z;
# Verify sccache cache location
sccache --show-adv-stats;
clone-all -j$(nproc) -v -q --clone-upstream --single-branch --shallow-submodules;
build-all \
-Wno-dev \
-j$(nproc --ignore=1) \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_TESTS=ON \
-DBUILD_BENCHMARKS=ON \
-DBUILD_PRIMS_BENCH=ON \
-DRAFT_COMPILE_LIBRARY=ON \
-DBUILD_CUGRAPH_MG_TESTS=ON \
;

# Clone all the repos
clone-all -j$(nproc) -v -q --clone-upstream --depth 1 --single-branch --shallow-submodules;

# Configure all the C++ libs
time configure-all \
-j0 \
-GNinja \
-Wno-dev \
-DBUILD_TESTS=ON \
-DBUILD_BENCHMARKS=ON \
-DBUILD_PRIMS_BENCH=ON \
-DBUILD_SHARED_LIBS=ON \
-DRAFT_COMPILE_LIBRARY=ON \
-DBUILD_CUGRAPH_MG_TESTS=ON ;

# Build all the C++ libs
time build-all-cpp -j0;

# Build all the Python libs
time build-all-python -j0;

# Print cache and dist stats
sccache --show-adv-stats;

# Print build times
find /var/log/devcontainer-utils/ -type f -name 'build-*-time.log' -print0 \
| xargs -0 -n1 grep -H real | sed 's/real\t/ /g' || : # Nonfatal if not found
1 change: 1 addition & 0 deletions .github/workflows/build-and-test-feature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ jobs:
aws_role_arn: "${{ secrets.GIST_REPO_READ_ORG_GITHUB_TOKEN && 'arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs' || '' }}"
rw_sccache_bucket: "${{ secrets.GIST_REPO_READ_ORG_GITHUB_TOKEN && 'rapids-sccache-devs' || '' }}"
rw_sccache_region: "${{ vars.AWS_REGION }}"
sccache_dist_scheduler_url: "sccache.rapids.nvidia.com"
2 changes: 2 additions & 0 deletions features/common/etc/skel/.config/clangd/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,5 @@ CompileFlags:
- "--expt-relaxed-constexpr"
- "-forward-unknown-to-host-compiler"
- "-Werror=cross-execution-space-call"
- "--compress-mode*"
- "-static-global-template-stub*"
129 changes: 129 additions & 0 deletions features/common/find-version-from-git-tags.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
#! /usr/bin/env bash

# Assign variable one scope above the caller
# Usage: local "$1" && _upvar $1 "value(s)"
# Param: $1 Variable name to assign value to
# Param: $* Value(s) to assign. If multiple values, an array is
# assigned, otherwise a single value is assigned.
# See: http://fvue.nl/wiki/Bash:_Passing_variables_by_reference
_upvar() {
if unset -v "$1"; then
if (( $# == 2 )); then
eval $1=\"\$2\";
else
eval $1=\(\"\${@:2}\"\);
fi;
fi
}

declare -Ag _find_version_from_git_tags_cache=();

# Figure out correct version of a three part version number is not passed
_find_version_from_git_tags() {
local variable_name="$1"
local requested_version="${!variable_name}"
if [ "${requested_version}" = "none" ]; then return; fi
local repository="$2"
local prefix="${3:-"tags/v"}"
local separator="${4:-"."}"
local suffix="${5:-}"
local last_part_optional="${6:-"false"}"
local after_version="${7:-""}"
if [ "$(echo "${requested_version}" | grep -o "." | wc -l)" != "2" ]; then
local escaped_separator="${separator//./\\.}"
local last_part=""
if [ "${last_part_optional}" = "true" ]; then
last_part+="(${escaped_separator}[0-9]+)?"
last_part+="(${escaped_separator}[0-9]+)?"
if [ -n "${suffix:+x}" ]; then
last_part+="(${suffix})?"
fi
else
last_part+="${escaped_separator}[0-9]+"
last_part+="${escaped_separator}[0-9]+"
if [ -n "${suffix:+x}" ]; then
last_part+="(${suffix})"
fi
fi
local regex="${prefix}\\K[0-9]+${last_part}$"

if ! test -v _find_version_from_git_tags_cache["$variable_name"]; then
local remote_upstream_fetch="$(git --no-pager config get remote.upstream.fetch)"
if test -n "${remote_upstream_fetch:+x}"; then
git config unset --global remote.upstream.fetch || true
fi
readarray -t version_list < <(
git ls-remote --tags "${repository}" \
| grep -oP "${regex}" \
| tr -d ' ' \
| tr "${separator}" "." \
| sort -rV
)
if test -n "${remote_upstream_fetch:+x}"; then
git config set --global remote.upstream.fetch "${remote_upstream_fetch}"
fi
_upvar _find_version_from_git_tags_cache["$variable_name"] "${version_list[*]}"
else
readarray -d' ' -t version_list <<< "${_find_version_from_git_tags_cache["$variable_name"]}"
fi
local version_list="$(IFS=$'\n'; echo "${version_list[*]}")"
if [ "${requested_version}" = "latest" ] || [ "${requested_version}" = "current" ] || [ "${requested_version}" = "lts" ]; then
requested_version="$(head -n 1 <<< "${version_list}")"
elif test -n "${after_version:+x}"; then
set +e
requested_version="$(grep -A 1 -m 1 "${after_version}" <<< "${version_list}" | tail -n 1)"
set -e
else
set +e
requested_version="$(grep -E -m 1 "^${requested_version//./\\.}([\\.\\s]|$)" <<< "${version_list}")"
set -e
fi
fi
if [ ! -n "${requested_version:+x}" ] || ! grep "^${requested_version//./\\.}$" <<< "${version_list}" > /dev/null 2>&1; then
echo -e "Invalid ${variable_name} value: ${requested_version}\nValid values:\n${version_list}" >&2
return 1
fi
_upvar "${variable_name}" "${requested_version}"
echo "${variable_name}=${requested_version}"
}

# Use semver logic to decrement a version number then look for the closest match
_find_prev_version_from_git_tags() {
local variable_name="$1"
local current_version="${!variable_name}"
local repository="$2"
# Normally a "v" is used before the version number, but support alternate cases
local prefix="${3:-"tags/v"}"
# Some repositories use "_" instead of "." for version number part separation, support that
local separator="${4:-"."}"
# Some repositories may have tags that include a suffix (e.g. actions/node-versions)
local version_suffix_regex="${5:-}"
# Some tools release versions that omit the last digit (e.g. go)
local last_part_optional="${6:-"false"}"
# Try one break fix version number less if we get a failure. Use "set +e" since "set -e" can cause failures in valid scenarios.
set +e
local major="$(echo "${current_version}" | grep -oE '^[0-9]+' || echo '')"
local minor="$(echo "${current_version}" | grep -oP '^[0-9]+\.\K[0-9]+' || echo '')"
local breakfix="$(echo "${current_version}" | grep -oP '^[0-9]+\.[0-9]+\.\K[0-9]+' 2>/dev/null || echo '')"

if [ "${minor}" = "0" ] && [ "${breakfix}" = "0" ]; then
((major=major-1))
_upvar "${variable_name}" "${major}"
# Look for latest version from previous major release
_find_version_from_git_tags "${variable_name}" "${repository}" "${prefix}" "${separator}" "${version_suffix_regex}" "${last_part_optional}"
# Handle situations like Go's odd version pattern where "0" releases omit the last part
elif [ "${breakfix}" = "" ] || [ "${breakfix}" = "0" ]; then
((minor=minor-1))
_upvar "${variable_name}" "${major}.${minor}"
# Look for latest version from previous minor release
_find_version_from_git_tags "${variable_name}" "${repository}" "${prefix}" "${separator}" "${version_suffix_regex}" "${last_part_optional}"
else
((breakfix=breakfix-1))
if [ "${breakfix}" = "0" ] && [ "${last_part_optional}" = "true" ]; then
_upvar "${variable_name}" "${major}.${minor}"
else
_upvar "${variable_name}" "${major}.${minor}.${breakfix}"
fi
fi
set -e
}
Loading
Loading