* Returns the package versions which are missing in the CI environment. * @param {Array } releasedVersions The released versions; need to * be sorted descending. * @param {Array } testedVersions The tested versions. * @param {String} versionComponent The latest version comp
(releasedVersions, testedVersions, versionComponent)
| 122 | * @returns {Array<String>} The untested versions. |
| 123 | */ |
| 124 | getUntestedVersions(releasedVersions, testedVersions, versionComponent) { |
| 125 | // Use these example values for debugging the version range logic below |
| 126 | // versionComponent = CiVersionCheck.versionComponents.patch; |
| 127 | // this.ignoreReleasedVersions = ['<4.4.0', '~4.7.0']; |
| 128 | // testedVersions = ['4.4.3']; |
| 129 | // releasedVersions = [ |
| 130 | // '5.0.0-rc0', |
| 131 | // '5.0.0', |
| 132 | // '4.9.1', |
| 133 | // '4.9.0', |
| 134 | // '4.8.1', |
| 135 | // '4.8.0', |
| 136 | // '4.7.1', |
| 137 | // '4.7.0', |
| 138 | // '4.4.3', |
| 139 | // '4.4.2', |
| 140 | // '4.4.0', |
| 141 | // '4.1.0', |
| 142 | // '3.5.0', |
| 143 | // ]; |
| 144 | |
| 145 | // Determine operator for range comparison |
| 146 | const operator = versionComponent == CiVersionCheck.versionComponents.major |
| 147 | ? '>=' |
| 148 | : versionComponent == CiVersionCheck.versionComponents.minor |
| 149 | ? '^' |
| 150 | : '~' |
| 151 | |
| 152 | // Get all untested versions |
| 153 | const untestedVersions = releasedVersions.reduce((m, v) => { |
| 154 | // If the version should be ignored, skip it |
| 155 | if (this.ignoreReleasedVersions.length > 0 && semver.satisfies(v, this.ignoreReleasedVersions.join(' || '))) { |
| 156 | return m; |
| 157 | } |
| 158 | // If the version is a pre-release, skip it |
| 159 | if ((semver.prerelease(v) || []).length > 0) { |
| 160 | return m; |
| 161 | } |
| 162 | // If a satisfying version has already been added to untested, skip it |
| 163 | if (semver.maxSatisfying(m, `${operator}${v}`)) { |
| 164 | return m; |
| 165 | } |
| 166 | // If a satisfying version is already tested, skip it |
| 167 | if (semver.maxSatisfying(testedVersions, `${operator}${v}`)) { |
| 168 | return m; |
| 169 | } |
| 170 | // Add version |
| 171 | m.push(v); |
| 172 | return m; |
| 173 | }, []); |
| 174 | |
| 175 | return untestedVersions; |
| 176 | } |
| 177 | |
| 178 | /** |
| 179 | * Returns the latest version for a given version and component. |