summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Wray <jason@mapbox.com>2019-06-28 13:58:16 -0700
committerJason Wray <jason@mapbox.com>2019-07-02 12:22:03 -0700
commit3b1d437460939254191479bd730599c2418c20aa (patch)
tree65d7979626eda9770208dee7ac1c533cbc5458fa
parent93ecf9ae302282dd6d98e4002a2a0d0dd3c006a7 (diff)
downloadqtlocation-mapboxgl-3b1d437460939254191479bd730599c2418c20aa.tar.gz
[ios, build] Add podspec lint script
-rw-r--r--Makefile6
-rw-r--r--circle.yml2
-rwxr-xr-xplatform/ios/scripts/lint-podspecs.js79
3 files changed, 85 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 35bf097486..aefd0b0458 100644
--- a/Makefile
+++ b/Makefile
@@ -292,10 +292,14 @@ iproj: $(IOS_PROJ_PATH)
xed $(IOS_WORK_PATH)
.PHONY: ios-lint
-ios-lint:
+ios-lint: ios-pod-lint
find platform/ios/framework -type f -name '*.plist' | xargs plutil -lint
find platform/ios/app -type f -name '*.plist' | xargs plutil -lint
+.PHONY: ios-pod-lint
+ios-pod-lint:
+ ./platform/ios/scripts/lint-podspecs.js
+
.PHONY: ios-test
ios-test: $(IOS_PROJ_PATH)
set -o pipefail && $(IOS_XCODEBUILD_SIM) -scheme 'CI' test $(XCPRETTY)
diff --git a/circle.yml b/circle.yml
index 6bbad1da1f..e69ef56e0d 100644
--- a/circle.yml
+++ b/circle.yml
@@ -959,7 +959,7 @@ jobs:
name: Check symbol namespacing for mapbox-events-ios
command: make ios-check-events-symbols
- run:
- name: Lint plist files
+ name: Lint podspecs and plist files
command: make ios-lint
- run:
name: Nitpick Darwin code generation
diff --git a/platform/ios/scripts/lint-podspecs.js b/platform/ios/scripts/lint-podspecs.js
new file mode 100755
index 0000000000..1381acacff
--- /dev/null
+++ b/platform/ios/scripts/lint-podspecs.js
@@ -0,0 +1,79 @@
+#!/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');
+process.exitCode = 0;
+
+const podspecsPath = 'platform/ios';
+
+/*
+ Step 1. Run the official CocoaPods linter against all of our podspecs.
+*/
+console.step(`Running CocoaPods linter against podspecs in '${podspecsPath}'`)
+execSync(`pod spec lint ${podspecsPath}/*.podspec --quick`, {stdio: 'inherit'});
+
+/*
+ Step 2. Check that our podspecs contain properly formatted version strings.
+*/
+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);
+
+ if (!semver.valid(matchedVersion)) {
+ console.error(` ❌ ${matchedVersion} is not a valid semantic version`);
+ process.exitCode = 1;
+ continue;
+ }
+
+ console.log(` ✅ ${matchedVersion} is a valid semantic version`);
+}
+
+/*
+ Step 3. Check that versions are consistent across our podspecs.
+*/
+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`);
+}
+
+/*
+ Step 4. Finish up and summarize the results.
+*/
+process.on('exit', (code) => {
+ if (code == 0) {
+ console.log('\nPodspec linting completed successfully! 🕵️‍♀️');
+ } else {
+ console.log('\nPodspec linting failed. 💥');
+ }
+});