diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df8deec --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.gem +Gemfile.lock + +## Documentation cache and generated files: +/.yardoc/ +/_yardoc/ +/doc/ +/rdoc/ +fastlane/README.md +fastlane/report.xml diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..79b4f5e --- /dev/null +++ b/.rspec @@ -0,0 +1,3 @@ +--require spec_helper +--color +--format d diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..edd72eb --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,247 @@ +Style/PercentLiteralDelimiters: + Enabled: false + +# kind_of? is a good way to check a type +Style/ClassCheck: + EnforcedStyle: kind_of? + +Style/FrozenStringLiteralComment: + Enabled: false + +# This doesn't work with older versions of Ruby (pre 2.4.0) +Style/SafeNavigation: + Enabled: false + +# This doesn't work with older versions of Ruby (pre 2.4.0) +Performance/RegexpMatch: + Enabled: false + +# .length == 0 is also good, we don't always want .zero? +Style/NumericPredicate: + Enabled: false + +# this would cause errors with long lanes +Metrics/BlockLength: + Enabled: false + +# this is a bit buggy +Metrics/ModuleLength: + Enabled: false + +# certificate_1 is an okay variable name +Style/VariableNumber: + Enabled: false + +# This is used a lot across the fastlane code base for config files +Style/MethodMissing: + Enabled: false + +# +# File.chmod(0777, f) +# +# is easier to read than +# +# File.chmod(0o777, f) +# +Style/NumericLiteralPrefix: + Enabled: false + +# +# command = (!clean_expired.nil? || !clean_pattern.nil?) ? CLEANUP : LIST +# +# is easier to read than +# +# command = !clean_expired.nil? || !clean_pattern.nil? ? CLEANUP : LIST +# +Style/TernaryParentheses: + Enabled: false + +# sometimes it is useful to have those empty methods +Style/EmptyMethod: + Enabled: false + +# It's better to be more explicit about the type +Style/BracesAroundHashParameters: + Enabled: false + +# specs sometimes have useless assignments, which is fine +Lint/UselessAssignment: + Exclude: + - '**/spec/**/*' + +# We could potentially enable the 2 below: +Style/IndentHash: + Enabled: false + +Style/AlignHash: + Enabled: false + +# HoundCI doesn't like this rule +Style/DotPosition: + Enabled: false + +# We allow !! as it's an easy way to convert ot boolean +Style/DoubleNegation: + Enabled: false + +# Prevent to replace [] into %i +Style/SymbolArray: + Enabled: false + +# We still support Ruby 2.0.0 +Style/IndentHeredoc: + Enabled: false + +# This cop would not work fine with rspec +Style/MixinGrouping: + Exclude: + - '**/spec/**/*' + +# Sometimes we allow a rescue block that doesn't contain code +Lint/HandleExceptions: + Enabled: false + +# Cop supports --auto-correct. +Lint/UnusedBlockArgument: + Enabled: false + +Lint/AmbiguousBlockAssociation: + Enabled: false + +# Needed for $verbose +Style/GlobalVars: + Enabled: false + +# We want to allow class Fastlane::Class +Style/ClassAndModuleChildren: + Enabled: false + +# $? Exit +Style/SpecialGlobalVars: + Enabled: false + +Metrics/AbcSize: + Enabled: false + +Metrics/MethodLength: + Enabled: false + +Metrics/CyclomaticComplexity: + Enabled: false + +# The %w might be confusing for new users +Style/WordArray: + MinSize: 19 + +# raise and fail are both okay +Style/SignalException: + Enabled: false + +# Better too much 'return' than one missing +Style/RedundantReturn: + Enabled: false + +# Having if in the same line might not always be good +Style/IfUnlessModifier: + Enabled: false + +# and and or is okay +Style/AndOr: + Enabled: false + +# Configuration parameters: CountComments. +Metrics/ClassLength: + Max: 320 + + +# Configuration parameters: AllowURI, URISchemes. +Metrics/LineLength: + Max: 370 + +# Configuration parameters: CountKeywordArgs. +Metrics/ParameterLists: + Max: 17 + +Metrics/PerceivedComplexity: + Max: 18 + +# Sometimes it's easier to read without guards +Style/GuardClause: + Enabled: false + +# We allow both " and ' +Style/StringLiterals: + Enabled: false + +# something = if something_else +# that's confusing +Style/ConditionalAssignment: + Enabled: false + +# Better to have too much self than missing a self +Style/RedundantSelf: + Enabled: false + +# e.g. +# def self.is_supported?(platform) +# we may never use `platform` +Lint/UnusedMethodArgument: + Enabled: false + +# the let(:key) { ... } +Lint/ParenthesesAsGroupedExpression: + Exclude: + - '**/spec/**/*' + +# This would reject is_ in front of methods +# We use `is_supported?` everywhere already +Style/PredicateName: + Enabled: false + +# We allow the $ +Style/PerlBackrefs: + Enabled: false + +# Disable '+ should be surrounded with a single space' for xcodebuild_spec.rb +Style/SpaceAroundOperators: + Exclude: + - '**/spec/actions_specs/xcodebuild_spec.rb' + +AllCops: + Include: + - '**/fastlane/Fastfile' + Exclude: + - '**/lib/assets/custom_action_template.rb' + - './vendor/**/*' + +# They have not to be snake_case +Style/FileName: + Exclude: + - '**/Dangerfile' + - '**/Brewfile' + - '**/Gemfile' + - '**/Podfile' + - '**/Rakefile' + - '**/Fastfile' + - '**/Deliverfile' + - '**/Snapfile' + +# We're not there yet +Style/Documentation: + Enabled: false + +# Added after upgrade to 0.38.0 +Style/MutableConstant: + Enabled: false + +# length > 0 is good +Style/ZeroLengthPredicate: + Enabled: false + +# Adds complexity +Style/IfInsideElse: + Enabled: false + +# Sometimes we just want to 'collect' +Style/CollectionMethods: + Enabled: false diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..3b35e45 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +# os: osx # enable this if you need macOS support +language: ruby +rvm: + - 2.2.4 diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..cb32a2e --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +gemspec + +plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b6bf46b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Jimmy Dee + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..521582c --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# branch plugin + +[![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-branch) + +## Getting Started + +This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-branch`, add it to your project by running: + +```bash +fastlane add_plugin branch +``` + +## About branch + +Adds Branch keys, custom URI schemes and domains to iOS and Android projects. + +**Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here. + +## Example + +Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`. + +**Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary) + +## Run tests for this plugin + +To run both the tests, and code style validation, run + +``` +rake +``` + +To automatically fix many of the styling issues, use +``` +rubocop -a +``` + +## Issues and Feedback + +For any other issues and feedback about this plugin, please submit it to this repository. + +## Troubleshooting + +If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide. + +## Using _fastlane_ Plugins + +For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/). + +## About _fastlane_ + +_fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools). diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..05f4f23 --- /dev/null +++ b/Rakefile @@ -0,0 +1,9 @@ +require 'bundler/gem_tasks' + +require 'rspec/core/rake_task' +RSpec::Core::RakeTask.new + +require 'rubocop/rake_task' +RuboCop::RakeTask.new(:rubocop) + +task default: [:spec, :rubocop] diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..3c3bb8d --- /dev/null +++ b/circle.yml @@ -0,0 +1,9 @@ +test: + override: + - bundle exec rake +machine: + ruby: + version: 2.2.4 +# Enable xcode below if you need macOS +# xcode: +# version: "7.3" diff --git a/fastlane-plugin-branch.gemspec b/fastlane-plugin-branch.gemspec new file mode 100644 index 0000000..9925393 --- /dev/null +++ b/fastlane-plugin-branch.gemspec @@ -0,0 +1,28 @@ +# coding: utf-8 +lib = File.expand_path("../lib", __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'fastlane/plugin/branch/version' + +Gem::Specification.new do |spec| + spec.name = 'fastlane-plugin-branch' + spec.version = Fastlane::Branch::VERSION + spec.author = %q{Jimmy Dee} + spec.email = %q{jgvdthree@gmail.com} + + spec.summary = %q{Adds Branch keys, custom URI schemes and domains to iOS and Android projects.} + spec.homepage = "https://github.com/BranchMetrics/fastlane-plugin-branch" + spec.license = "MIT" + + spec.files = Dir["lib/**/*"] + %w(README.md LICENSE) + spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) + spec.require_paths = ['lib'] + + spec.add_dependency 'plist' + + spec.add_development_dependency 'pry' + spec.add_development_dependency 'bundler' + spec.add_development_dependency 'rspec' + spec.add_development_dependency 'rake' + spec.add_development_dependency 'rubocop' + spec.add_development_dependency 'fastlane', '>= 2.26.1' +end diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 0000000..a2dfb28 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,3 @@ +lane :test do + branch +end diff --git a/fastlane/Pluginfile b/fastlane/Pluginfile new file mode 100644 index 0000000..e0576b0 --- /dev/null +++ b/fastlane/Pluginfile @@ -0,0 +1 @@ +# Autogenerated by fastlane diff --git a/lib/fastlane/plugin/branch.rb b/lib/fastlane/plugin/branch.rb new file mode 100644 index 0000000..9faf32b --- /dev/null +++ b/lib/fastlane/plugin/branch.rb @@ -0,0 +1,16 @@ +require 'fastlane/plugin/branch/version' + +module Fastlane + module Branch + # Return all .rb files inside the "actions" and "helper" directory + def self.all_classes + Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))] + end + end +end + +# By default we want to import all available actions and helpers +# A plugin can contain any number of actions and plugins +Fastlane::Branch.all_classes.each do |current| + require current +end diff --git a/lib/fastlane/plugin/branch/actions/branch_action.rb b/lib/fastlane/plugin/branch/actions/branch_action.rb new file mode 100644 index 0000000..088936b --- /dev/null +++ b/lib/fastlane/plugin/branch/actions/branch_action.rb @@ -0,0 +1,44 @@ +module Fastlane + module Actions + class BranchAction < Action + def self.run(params) + UI.message("The branch plugin is working!") + end + + def self.description + "Adds Branch keys, custom URI schemes and domains to iOS and Android projects." + end + + def self.authors + ["Jimmy Dee"] + end + + def self.return_value + # If your method provides a return value, you can describe here what it does + end + + def self.details + # Optional: + "More to come" + end + + def self.available_options + [ + # FastlaneCore::ConfigItem.new(key: :your_option, + # env_name: "BRANCH_YOUR_OPTION", + # description: "A description of your option", + # optional: false, + # type: String) + ] + end + + def self.is_supported?(platform) + # Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example) + # See: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md + # + # [:ios, :mac, :android].include?(platform) + true + end + end + end +end diff --git a/lib/fastlane/plugin/branch/helper/branch_helper.rb b/lib/fastlane/plugin/branch/helper/branch_helper.rb new file mode 100644 index 0000000..c8b80fb --- /dev/null +++ b/lib/fastlane/plugin/branch/helper/branch_helper.rb @@ -0,0 +1,12 @@ +module Fastlane + module Helper + class BranchHelper + # class methods that you define here become available in your action + # as `Helper::BranchHelper.your_method` + # + def self.show_message + UI.message("Hello from the branch plugin helper!") + end + end + end +end diff --git a/lib/fastlane/plugin/branch/version.rb b/lib/fastlane/plugin/branch/version.rb new file mode 100644 index 0000000..d751796 --- /dev/null +++ b/lib/fastlane/plugin/branch/version.rb @@ -0,0 +1,5 @@ +module Fastlane + module Branch + VERSION = "0.1.0" + end +end diff --git a/spec/branch_action_spec.rb b/spec/branch_action_spec.rb new file mode 100644 index 0000000..f13232a --- /dev/null +++ b/spec/branch_action_spec.rb @@ -0,0 +1,9 @@ +describe Fastlane::Actions::BranchAction do + describe '#run' do + it 'prints a message' do + expect(Fastlane::UI).to receive(:message).with("The branch plugin is working!") + + Fastlane::Actions::BranchAction.run(nil) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..c2f1a76 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,10 @@ +$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) + +# This module is only used to check the environment is currently a testing env +module SpecHelper +end + +require 'fastlane' # to import the Action super class +require 'fastlane/plugin/branch' # import the actual plugin + +Fastlane.load_actions # load other actions (in case your plugin calls other actions or shared values)