Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configure Circle CI #20

Merged
merged 16 commits into from
Feb 24, 2017
13 changes: 0 additions & 13 deletions .travis.yml

This file was deleted.

26 changes: 13 additions & 13 deletions Pods/Pods.xcodeproj/project.pbxproj

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# StencilSwiftKit

[![Build Status](https://travis-ci.org/SwiftGen/StencilSwiftKit.svg?branch=master)](https://travis-ci.org/SwiftGen/StencilSwiftKit)
[![CircleCI](https://circleci.com/gh/SwiftGen/StencilSwiftKit/tree/master.svg?style=svg)](https://circleci.com/gh/SwiftGen/StencilSwiftKit/tree/master)
[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/StencilSwiftKit.svg)](https://img.shields.io/cocoapods/v/StencilSwiftKit.svg)
[![Platform](https://img.shields.io/cocoapods/p/StencilSwiftKit.svg?style=flat)](http://cocoadocs.org/docsets/StencilSwiftKit)
![Swift 3.0](https://img.shields.io/badge/Swift-3.0-orange.svg)
Expand Down
58 changes: 45 additions & 13 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,25 +1,57 @@
def xcpretty(cmd)
if `which xcpretty` && $?.success?
def xcpretty(cmd, task)
name = task.name.gsub(/:/,"_")
if ENV['CI']
sh "set -o pipefail && #{cmd} | tee \"#{ENV['CIRCLE_ARTIFACTS']}/#{name}_raw.log\" | xcpretty --color --report junit --output \"#{ENV['CIRCLE_TEST_REPORTS']}/xcode/#{name}.xml\""
elsif `which xcpretty` && $?.success?
sh "set -o pipefail && #{cmd} | xcpretty -c"
else
sh cmd
end
end

task :build_for_testing do
sh "swift build"
xcpretty "xcodebuild -workspace StencilSwiftKit.xcworkspace -scheme Tests build-for-testing"
def plain(cmd, task)
name = task.name.gsub(/:/,"_")
if ENV['CI']
sh "set -o pipefail && #{cmd} | tee \"#{ENV['CIRCLE_ARTIFACTS']}/#{name}_raw.log\""
else
sh cmd
end
end

desc 'Run Unit Tests'
task :test => :build_for_testing do
sh "swift test"
xcpretty "xcodebuild -workspace StencilSwiftKit.xcworkspace -scheme Tests test-without-building"
namespace :spm do
desc 'Build using SPM'
task :build do |task|
plain("swift build", task)
end

desc 'Run SPM Unit Tests'
task :test => :build do |task|
plain("swift test", task)
end
end

desc 'Lint the Pod'
task :lint do
sh "pod lib lint StencilSwiftKit.podspec --quick"
namespace :xcode do
desc 'Build using Xcode'
task :build do |task|
xcpretty("xcodebuild -workspace StencilSwiftKit.xcworkspace -scheme Tests build-for-testing", task)
end

desc 'Run Xcode Unit Tests'
task :test => :build do |task|
xcpretty("xcodebuild -workspace StencilSwiftKit.xcworkspace -scheme Tests test-without-building", task)
end
end

namespace :lint do
desc 'Lint the Pod'
task :pod do |task|
plain("pod lib lint StencilSwiftKit.podspec --quick", task)
end

desc 'Lint the code'
task :code do |task|
plain("PROJECT_DIR=. ./Scripts/swiftlint-code.sh", task)
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a thought: I'm not sure about the readability/logic of grouping those two commands, still undecided.

Because "linting a pod" and "linting the code" seems two different kinds of lints to me. One is checking that the podspec "compiles" (the podspec file doesn't have any syntax error, and that a project with that pod would compile), the other is checking for code style issues.

Maybe it would be more logical to put everything related to SwiftLint in the Rakefile anyway (I mean instead of having separate .sh scripts to install swiftlint and lint the code — which were there at first because we didn't have any Rakefile or because we found this install_swiftlint script as is) and have rake swiftlint:install, rake swiftlint:sourcecode and rake swiftlint:tests tasks? (and then concerning the pod lib lint, not sure it's worth having a dedicated rake task?)

end

task :default => :test
task :default => "xcode:test"
25 changes: 25 additions & 0 deletions Scripts/install_swiftlint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

# Installs the SwiftLint package.
# Tries to get the precompiled .pkg file from Github, but if that
# fails just recompiles from source.
#
# Original script: https://alexplescan.com/posts/2016/03/03/setting-up-swiftlint-on-travis-ci/

set -e

SWIFTLINT_PKG_PATH="/tmp/SwiftLint.pkg"
SWIFTLINT_PKG_URL="https://github.com/realm/SwiftLint/releases/download/0.16.1/SwiftLint.pkg"

curl -Lo $SWIFTLINT_PKG_PATH $SWIFTLINT_PKG_URL

if [ -f $SWIFTLINT_PKG_PATH ]; then
echo "SwiftLint package exists! Installing it..."
sudo installer -pkg $SWIFTLINT_PKG_PATH -target /
else
echo "SwiftLint package doesn't exist. Compiling from source..." &&
git clone https://github.com/realm/SwiftLint.git /tmp/SwiftLint &&
cd /tmp/SwiftLint &&
git submodule update --init --recursive &&
sudo make install
fi
10 changes: 10 additions & 0 deletions Scripts/swiftlint-code.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
if which swiftlint >/dev/null; then
RESULT=0

swiftlint lint --no-cache --strict --path "${PROJECT_DIR}/Sources" || { RESULT=1; }
swiftlint lint --no-cache --strict --path "${PROJECT_DIR}/Tests/StencilSwiftKitTests" || { RESULT=1; }

exit $RESULT
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
8 changes: 5 additions & 3 deletions Sources/Context.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@ public enum StencilContext {
- Parameter parameters: List of strings, will be parsed using the `Parameters.parse(items:)` method
- Parameter environment: Environment variables, defaults to `ProcessInfo().environment`
*/
public static func enrich(context: [String: Any], parameters: [String], environment: [String: String] = ProcessInfo().environment) throws -> [String: Any] {
public static func enrich(context: [String: Any],
parameters: [String],
environment: [String: String] = ProcessInfo().environment) throws -> [String: Any] {
var context = context

context[StencilContext.environment] = environment
context[StencilContext.parameters] = try Parameters.parse(items: parameters)

return context
}
}
2 changes: 1 addition & 1 deletion Sources/Environment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ public extension Extension {
public func stencilSwiftEnvironment() -> Environment {
let ext = Extension()
ext.registerStencilSwiftExtensions()

return Environment(extensions: [ext], templateClass: StencilSwiftTemplate.self)
}
10 changes: 8 additions & 2 deletions Sources/Filters.swift
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,14 @@ struct StringFilters {
let camelCased = try NSRegularExpression(pattern: "([a-z\\d])([A-Z])", options: .dotMatchesLineSeparators)

let fullRange = NSRange(location: 0, length: string.unicodeScalars.count)
var result = longUpper.stringByReplacingMatches(in: string, options: .reportCompletion, range: fullRange, withTemplate: "$1_$2")
result = camelCased.stringByReplacingMatches(in: result, options: .reportCompletion, range: fullRange, withTemplate: "$1_$2")
var result = longUpper.stringByReplacingMatches(in: string,
options: .reportCompletion,
range: fullRange,
withTemplate: "$1_$2")
result = camelCased.stringByReplacingMatches(in: result,
options: .reportCompletion,
range: fullRange,
withTemplate: "$1_$2")
return result.replacingOccurrences(of: "-", with: "_")
}
}
Expand Down
Loading