#!/usr/bin/env ruby $:.push File.expand_path("../../lib", __FILE__) require 'deliver' require 'commander' HighLine.track_eof = false class FastlaneApplication include Commander::Methods def run program :version, Deliver::VERSION program :description, 'CLI for \'Deliver\' - Upload screenshots, metadata and your app to the App Store using a single command' program :help, 'Author', 'Felix Krause ' program :help, 'Website', 'https://fastlane.tools' program :help, 'GitHub', 'https://github.com/krausefx/deliver' program :help_formatter, :compact global_option '-f', '--force', 'Runs a deployment without verifying any information (PDF file). This can be used for build servers.' global_option '--beta', 'Upload a beta build to iTunes Connect. This uses the `beta_ipa` block.' global_option '--skip-deploy', 'Skips submission of the build on iTunes Connect. This will only upload the ipa and/or metadata.' always_trace! command :run do |c| c.syntax = 'deliver' c.description = 'Run a deploy process using the Deliverfile in the current folder' c.action do |args, options| FastlaneCore::UpdateChecker.start_looking_for_update('deliver') path = (Deliver::Helper.fastlane_enabled?? './fastlane' : '.') Dir.chdir(path) do # switch the context if File.exists?(deliver_path) # Everything looks alright, use the given Deliverfile options.default :beta => false, :skip_deploy => false Deliver::Deliverer.new(deliver_path, force: options.force, is_beta_ipa: options.beta, skip_deploy: options.skip_deploy) else Deliver::Helper.log.warn("No Deliverfile found at path '#{deliver_path}'.") if agree("Do you want to create a new Deliverfile at the current directory? (y/n)", true) Deliver::DeliverfileCreator.create(enclosed_directory) end end end FastlaneCore::UpdateChecker.show_update_status('deliver', Deliver::VERSION) end end command :init do |c| c.syntax = 'deliver init' c.option '-u', '--username String', String, 'Your Apple ID' c.description = "Creates a new Deliverfile in the current directory" c.action do |args, options| set_username(options.username) path = (Deliver::Helper.fastlane_enabled?? './fastlane' : '.') Deliver::DeliverfileCreator.create(path) end end command :testflight do |c| c.syntax = 'deliver testflight' c.description = "Uploads a given ipa file to the new Apple TestFlight" c.option '-a', '--app_id String', String, 'The App ID (numeric, like 956814360)' c.option '-u', '--username String', String, 'Your Apple ID' c.action do |args, options| FastlaneCore::UpdateChecker.start_looking_for_update('deliver') ipa_path = (args.first || determine_ipa) + '' # unfreeze the string set_username(options.username) Deliver::Testflight.upload!(ipa_path, options.app_id, options.skip_deploy) FastlaneCore::UpdateChecker.show_update_status('deliver', Deliver::VERSION) end end def set_username(username) user = username user ||= ENV["DELIVER_USERNAME"] user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id) CredentialsManager::PasswordManager.shared_manager(user) if user end def determine_ipa return Dir['*.ipa'].first if Dir["*.ipa"].count == 1 return ask("Path to IPA file to upload: ".green) end default_command :run run! end end def deliver_path File.join(enclosed_directory, Deliver::Deliverfile::Deliverfile::FILE_NAME) end # The directoy in which the Deliverfile and metadata should be created def enclosed_directory "." end FastlaneApplication.new.run