This repository has been archived by the owner on Aug 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ios, build] Add podspec lint script
- Loading branch information
1 parent
7973583
commit 218cc41
Showing
2 changed files
with
73 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
#!/usr/bin/env node | ||
|
||
const fs = require('fs'); | ||
const execSync = require('child_process').execSync; | ||
const _ = require('lodash'); | ||
const semver = require('semver'); | ||
|
||
console.step = _.partial(console.log, '\n\033[1m\033[36m*', _, '\033[0m'); | ||
|
||
const podspecsPath = 'platform/ios'; | ||
|
||
/* | ||
------------------------ | ||
*/ | ||
console.step(`Running CocoaPods linter against podspecs in '${podspecsPath}'`) | ||
execSync(`pod spec lint ${podspecsPath}/*.podspec --quick`, {stdio: 'inherit'}); | ||
|
||
/* | ||
------------------------ | ||
*/ | ||
console.step('Checking Mapbox SDK version strings in podspecs') | ||
const podspecs = fs.readdirSync(podspecsPath).filter(fn => fn.endsWith('.podspec')); | ||
|
||
let matchedVersions = []; | ||
|
||
for (const podspecFilename of podspecs) { | ||
console.log(podspecFilename); | ||
const podspecContents = fs.readFileSync(`${podspecsPath}/${podspecFilename}`, 'utf8'); | ||
|
||
/* | ||
This regular expression: | ||
- Matches single lines in the format: version = '9.9.9' | ||
- Groups the version number inside the single quotes. | ||
- Ignores whitespace at the start of the line and between parts of the definition using: \s*? | ||
*/ | ||
const regex = /^\s*?version\s*?=\s*?'(.*)'$/gmi; | ||
|
||
const match = regex.exec(podspecContents); | ||
if (!match) { | ||
console.error(' ❌ No version string found'); | ||
process.exitCode = 1; | ||
continue; | ||
} | ||
|
||
const matchedVersion = match[1]; | ||
matchedVersions.push(matchedVersion); | ||
|
||
const semanticVersion = semver.valid(matchedVersion); | ||
if (!semanticVersion) { | ||
console.error(` ❌ ${matchedVersion} is not a valid semantic version`); | ||
process.exitCode = 1; | ||
continue; | ||
} | ||
|
||
console.log(` ✅ ${matchedVersion} is a valid semantic version`); | ||
} | ||
|
||
/* | ||
------------------------ | ||
*/ | ||
console.step('Checking version consistency') | ||
const uniqueVersions = _.uniq(matchedVersions); | ||
if (uniqueVersions.length != 1) { | ||
console.error('❌ Versions in podspecs do not match:', uniqueVersions); | ||
process.exitCode = 1; | ||
} else { | ||
console.log(`✅ ${uniqueVersions[0]} is set in all podspecs`); | ||
} |