deploygate 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/config/locales/en.yml +7 -0
- data/deploygate.gemspec +2 -0
- data/lib/deploygate/add_devices_server.rb +79 -0
- data/lib/deploygate/api/v1/base.rb +1 -1
- data/lib/deploygate/api/v1/users/apps/cli_websockets.rb +42 -0
- data/lib/deploygate/command_builder.rb +3 -1
- data/lib/deploygate/commands/add_devices.rb +30 -9
- data/lib/deploygate/version.rb +1 -1
- data/lib/deploygate.rb +4 -0
- metadata +32 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                ZTI5MDhlOGNmOGY1OWRkYzM3OTEwZTc2NjRhOTRjYjNlM2U5YzVmNw==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                MWUwNTJmNTdiNGY4MWJmMTY2MTUyMzlkZGI5NjQ0NTQxOTJlM2VmNA==
         | 
| 7 7 | 
             
            SHA512:
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                YjkyMmExM2EwMjQwNzk2NWVhMzZjMzhiNDYxNTM1ZDM0ZDE2Mzg5NTZmNTU1
         | 
| 10 | 
            +
                YmVmZTFhOWI0MWZlZDU0YWIxNTlmOWY3ZDFlYmU3NDZhMjk4MjlkMjA3Njgz
         | 
| 11 | 
            +
                YmNlNDBlYTNiZWE1MTE0MmE3NDBmOWMwNWZkZmJkYWE3YjExYzc=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                NDQwODQ1MGRiNDg4N2NjN2RjMmRjZWE4NmMyM2ZmODA1ZjUzM2FiMDBlMThm
         | 
| 14 | 
            +
                ZjU3MGRhOTM0YTFmOTgzNWQ5ODQ1N2EwZWI2OGE4YTY2Y2Y3MTE4M2Y5NTVj
         | 
| 15 | 
            +
                NzAxNDhiOTM0ZDY1Y2E0MTNkNjc5NWIyNmQwMThkMmY2YWM1N2M=
         | 
    
        data/config/locales/en.yml
    CHANGED
    
    | @@ -20,7 +20,14 @@ en: | |
| 20 20 | 
             
                  user: 'Owner user or organization name'
         | 
| 21 21 | 
             
                  udid: 'UDID to be registered'
         | 
| 22 22 | 
             
                  device_name: 'Device name to be registered'
         | 
| 23 | 
            +
                  distribution_key: 'If you also want to update distribution page, set the last part of the URL of the page'
         | 
| 23 24 | 
             
                  error: 'Commands::AddDevices Error: %{e}'
         | 
| 25 | 
            +
                  server:
         | 
| 26 | 
            +
                    description: 'Start the add-devices server. When added new device automatically run add-devices command.'
         | 
| 27 | 
            +
                    connecting: 'Connecting...'
         | 
| 28 | 
            +
                    start: 'Start add-devices server. Use Ctrl-C to stop.'
         | 
| 29 | 
            +
                    start_build: 'New device has been added. Start add-devices command.'
         | 
| 30 | 
            +
                    finish_build: 'add-devices completed successfully.'
         | 
| 24 31 | 
             
                logout:
         | 
| 25 32 | 
             
                  description: 'Log out current session'
         | 
| 26 33 | 
             
                  error: 'Commands::Logout Error: %{e}'
         | 
    
        data/deploygate.gemspec
    CHANGED
    
    | @@ -34,6 +34,8 @@ POST_INSTALL_MESSAGE | |
| 34 34 | 
             
              spec.add_dependency 'launchy'
         | 
| 35 35 | 
             
              spec.add_dependency 'locale'
         | 
| 36 36 | 
             
              spec.add_dependency 'net-ping'
         | 
| 37 | 
            +
              spec.add_dependency 'socket.io-client-simple'
         | 
| 38 | 
            +
              spec.add_dependency 'workers'
         | 
| 37 39 |  | 
| 38 40 | 
             
              # ios build
         | 
| 39 41 | 
             
              spec.add_dependency 'gym', '~> 1.7.0'
         | 
| @@ -0,0 +1,79 @@ | |
| 1 | 
            +
            module DeployGate
         | 
| 2 | 
            +
              class AddDevicesServer
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def start(token, owner_name, bundle_id, distribution_key, args, options)
         | 
| 5 | 
            +
                  DeployGate::Xcode::MemberCenter.instance
         | 
| 6 | 
            +
                  options.server = false
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  puts I18n.t('command_builder.add_devices.server.connecting')
         | 
| 9 | 
            +
                  res = DeployGate::API::V1::Users::Apps::CliWebsockets.create(token, owner_name, bundle_id, distribution_key)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  server = res[:webpush_server]
         | 
| 12 | 
            +
                  push_token  = res[:push_token]
         | 
| 13 | 
            +
                  action  = res[:action]
         | 
| 14 | 
            +
                  if res[:error] || server.blank? || push_token.blank? || action.blank?
         | 
| 15 | 
            +
                    raise res[:message]
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  websocket_setup(server, bundle_id, push_token, action, args, options) do |socket|
         | 
| 19 | 
            +
                    puts HighLine.color(I18n.t('command_builder.add_devices.server.start'), HighLine::GREEN)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    Workers::PeriodicTimer.new(60) do
         | 
| 22 | 
            +
                      DeployGate::API::V1::Users::Apps::CliWebsockets.heartbeat(token, owner_name, bundle_id, distribution_key, push_token)
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    Signal.trap(:INT){
         | 
| 26 | 
            +
                      socket.disconnect
         | 
| 27 | 
            +
                      exit 0
         | 
| 28 | 
            +
                    }
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  loop do
         | 
| 32 | 
            +
                    sleep 60
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def self.build(pool, bunlde_id, iphones, args, options)
         | 
| 37 | 
            +
                  iphones.reject! { |iphone| iphone['is_registered'] } # remove udids if already registered
         | 
| 38 | 
            +
                  devices = iphones.map do |iphone|
         | 
| 39 | 
            +
                    udid = iphone['udid']
         | 
| 40 | 
            +
                    device_name= iphone['device_name']
         | 
| 41 | 
            +
                    DeployGate::Xcode::MemberCenters::Device.new(udid, '', device_name)
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                  return if devices.empty?
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  puts HighLine.color(I18n.t('command_builder.add_devices.server.start_build'), HighLine::GREEN)
         | 
| 46 | 
            +
                  pool.perform do
         | 
| 47 | 
            +
                    DeployGate::Commands::AddDevices.register!(devices)
         | 
| 48 | 
            +
                    DeployGate::Commands::AddDevices.build!(bunlde_id, args, options)
         | 
| 49 | 
            +
                    puts HighLine.color(I18n.t('command_builder.add_devices.server.finish_build'), HighLine::GREEN)
         | 
| 50 | 
            +
                    puts ''
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                private
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                def websocket_setup(server, bundle_id, push_token, target_action, args, options, &block)
         | 
| 57 | 
            +
                  socket = SocketIO::Client::Simple.connect server
         | 
| 58 | 
            +
                  socket.on :connect do
         | 
| 59 | 
            +
                    socket.emit :subscribe, push_token
         | 
| 60 | 
            +
                    block.call(socket)
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  socket.on :error do
         | 
| 64 | 
            +
                    raise 'Socket Error'
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                  pool = Workers::Pool.new(size: 1, on_exception: proc { |e|
         | 
| 68 | 
            +
                    raise e
         | 
| 69 | 
            +
                  })
         | 
| 70 | 
            +
                  socket.on push_token do |push_data|
         | 
| 71 | 
            +
                    return if push_data['action'] != target_action
         | 
| 72 | 
            +
                    data = JSON.parse(push_data['data'])
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    iphones = data['iphones']
         | 
| 75 | 
            +
                    DeployGate::AddDevicesServer.build(pool, bundle_id, iphones, args, options)
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
            end
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            module DeployGate::API::V1::Users::Apps
         | 
| 2 | 
            +
              class CliWebsockets
         | 
| 3 | 
            +
                ENDPOINT = "/users/%s/platforms/%s/apps/%s/cli_websockets"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                class << self
         | 
| 6 | 
            +
                  def create(token, name, package_name, distribution_key, platform = 'ios')
         | 
| 7 | 
            +
                    params = {distribution_access_key: distribution_key} unless distribution_key.nil?
         | 
| 8 | 
            +
                    res = DeployGate::API::V1::Base.new(token).post(sprintf(ENDPOINT, name, platform, package_name), params || {})
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    results = {
         | 
| 11 | 
            +
                        error: res['error']
         | 
| 12 | 
            +
                    }
         | 
| 13 | 
            +
                    if results[:error]
         | 
| 14 | 
            +
                      results.merge!(
         | 
| 15 | 
            +
                          {
         | 
| 16 | 
            +
                              message: res['message']
         | 
| 17 | 
            +
                          }
         | 
| 18 | 
            +
                      )
         | 
| 19 | 
            +
                    else
         | 
| 20 | 
            +
                      results.merge!(
         | 
| 21 | 
            +
                          {
         | 
| 22 | 
            +
                              push_token: res['results']['push_token'],
         | 
| 23 | 
            +
                              webpush_server: res['results']['webpush_server'],
         | 
| 24 | 
            +
                              action: res['results']['action']
         | 
| 25 | 
            +
                          }
         | 
| 26 | 
            +
                      )
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    results
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def heartbeat(token, name, package_name, distribution_key, push_token, platform = 'ios')
         | 
| 33 | 
            +
                    params = {distribution_access_key: distribution_key} unless distribution_key.nil?
         | 
| 34 | 
            +
                    res = DeployGate::API::V1::Base.new(token).get("#{sprintf(ENDPOINT, name, platform, package_name)}/#{push_token}/heartbeat", params || {})
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    {
         | 
| 37 | 
            +
                        error: res['error']
         | 
| 38 | 
            +
                    }
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
| @@ -80,8 +80,10 @@ module DeployGate | |
| 80 80 | 
             
                    c.option '--user STRING', String, I18n.t('command_builder.add_devices.user')
         | 
| 81 81 | 
             
                    c.option '--udid STRING', String, I18n.t('command_builder.add_devices.udid')
         | 
| 82 82 | 
             
                    c.option '--device-name STRING', String, I18n.t('command_builder.add_devices.device_name')
         | 
| 83 | 
            +
                    c.option '--distribution-key STRING', String, I18n.t('command_builder.add_devices.distribution_key')
         | 
| 84 | 
            +
                    c.option '--server', I18n.t('command_builder.add_devices.server.description')
         | 
| 83 85 | 
             
                    c.action do |args, options|
         | 
| 84 | 
            -
                      options.default :user => nil
         | 
| 86 | 
            +
                      options.default :user => nil, :server => false
         | 
| 85 87 | 
             
                      begin
         | 
| 86 88 | 
             
                        Commands::AddDevices.run(args, options)
         | 
| 87 89 | 
             
                      rescue => e
         | 
| @@ -15,21 +15,32 @@ module DeployGate | |
| 15 15 | 
             
                        session = DeployGate::Session.new()
         | 
| 16 16 | 
             
                      end
         | 
| 17 17 |  | 
| 18 | 
            -
                      owner | 
| 19 | 
            -
                      udid | 
| 20 | 
            -
                      device_name | 
| 18 | 
            +
                      owner            = options.user || session.name
         | 
| 19 | 
            +
                      udid             = options.udid
         | 
| 20 | 
            +
                      device_name      = options.device_name
         | 
| 21 | 
            +
                      distribution_key = options.distribution_key
         | 
| 22 | 
            +
                      server           = options.server
         | 
| 21 23 |  | 
| 22 24 | 
             
                      bundle_id = bundle_id(work_dir)
         | 
| 23 25 |  | 
| 26 | 
            +
                      if server
         | 
| 27 | 
            +
                        run_server(session, owner, bundle_id, distribution_key, args, options)
         | 
| 28 | 
            +
                      else
         | 
| 29 | 
            +
                        device_register(session, owner, udid, device_name, bundle_id, args, options)
         | 
| 30 | 
            +
                      end
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    def run_server(session, owner, bundle_id, distribution_key, args, options)
         | 
| 34 | 
            +
                      DeployGate::AddDevicesServer.new().start(session.token, owner, bundle_id, distribution_key, args, options)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    def device_register(session, owner, udid, device_name, bundle_id, args, options)
         | 
| 24 38 | 
             
                      if udid.nil? && device_name.nil?
         | 
| 25 39 | 
             
                        devices = fetch_devices(session.token, owner, bundle_id)
         | 
| 26 40 | 
             
                        select_devices = select_devices(devices)
         | 
| 27 41 | 
             
                        not_device if select_devices.empty?
         | 
| 28 42 |  | 
| 29 | 
            -
                         | 
| 30 | 
            -
                          device.register!
         | 
| 31 | 
            -
                          success_registered_device(device)
         | 
| 32 | 
            -
                        end
         | 
| 43 | 
            +
                        register!(devices)
         | 
| 33 44 | 
             
                      else
         | 
| 34 45 | 
             
                        register_udid = udid || HighLine.ask(I18n.t('commands.add_devices.input_udid'))
         | 
| 35 46 | 
             
                        register_device_name = device_name || HighLine.ask(I18n.t('commands.add_devices.input_device_name'))
         | 
| @@ -37,13 +48,23 @@ module DeployGate | |
| 37 48 |  | 
| 38 49 | 
             
                        puts device.to_s
         | 
| 39 50 | 
             
                        if HighLine.agree(I18n.t('commands.add_devices.device_register_confirm')) {|q| q.default = "y"}
         | 
| 40 | 
            -
                           | 
| 41 | 
            -
                          success_registered_device(device)
         | 
| 51 | 
            +
                          register!([device])
         | 
| 42 52 | 
             
                        else
         | 
| 43 53 | 
             
                          not_device
         | 
| 44 54 | 
             
                        end
         | 
| 45 55 | 
             
                      end
         | 
| 46 56 |  | 
| 57 | 
            +
                      build!(bundle_id, args, options)
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    def register!(devices)
         | 
| 61 | 
            +
                      devices.each do |device|
         | 
| 62 | 
            +
                        device.register!
         | 
| 63 | 
            +
                        success_registered_device(device)
         | 
| 64 | 
            +
                      end
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    def build!(bundle_id, args, options)
         | 
| 47 68 | 
             
                      DeployGate::Xcode::MemberCenters::ProvisioningProfile.new(bundle_id).create!
         | 
| 48 69 | 
             
                      team = DeployGate::Xcode::MemberCenter.instance.team
         | 
| 49 70 | 
             
                      DeployGate::Xcode::Export.clean_provisioning_profiles(bundle_id, team)
         | 
    
        data/lib/deploygate/version.rb
    CHANGED
    
    
    
        data/lib/deploygate.rb
    CHANGED
    
    | @@ -19,6 +19,8 @@ require "rexml/document" | |
| 19 19 | 
             
            require "launchy"
         | 
| 20 20 | 
             
            require "webrick"
         | 
| 21 21 | 
             
            require "net/ping"
         | 
| 22 | 
            +
            require "socket.io-client-simple"
         | 
| 23 | 
            +
            require "workers"
         | 
| 22 24 |  | 
| 23 25 | 
             
            require "i18n"
         | 
| 24 26 | 
             
            I18n.load_path = Dir[File.join(File.dirname(__FILE__), '../config/locales/*.yml')]
         | 
| @@ -38,6 +40,7 @@ require "deploygate/api/v1/session" | |
| 38 40 | 
             
            require "deploygate/api/v1/push"
         | 
| 39 41 | 
             
            require "deploygate/api/v1/user"
         | 
| 40 42 | 
             
            require "deploygate/api/v1/users/app"
         | 
| 43 | 
            +
            require "deploygate/api/v1/users/apps/cli_websockets"
         | 
| 41 44 | 
             
            require "deploygate/command_builder"
         | 
| 42 45 | 
             
            require "deploygate/commands/login"
         | 
| 43 46 | 
             
            require "deploygate/commands/logout"
         | 
| @@ -54,6 +57,7 @@ require "deploygate/deploy" | |
| 54 57 | 
             
            require "deploygate/project"
         | 
| 55 58 | 
             
            require "deploygate/user"
         | 
| 56 59 | 
             
            require "deploygate/browser_login"
         | 
| 60 | 
            +
            require "deploygate/add_devices_server"
         | 
| 57 61 | 
             
            require "deploygate/xcode/member_center"
         | 
| 58 62 | 
             
            require "deploygate/xcode/member_centers/app"
         | 
| 59 63 | 
             
            require "deploygate/xcode/member_centers/provisioning_profile"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: deploygate
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - deploygate
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-08-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: json
         | 
| @@ -206,6 +206,34 @@ dependencies: | |
| 206 206 | 
             
                - - ! '>='
         | 
| 207 207 | 
             
                  - !ruby/object:Gem::Version
         | 
| 208 208 | 
             
                    version: '0'
         | 
| 209 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 210 | 
            +
              name: socket.io-client-simple
         | 
| 211 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 212 | 
            +
                requirements:
         | 
| 213 | 
            +
                - - ! '>='
         | 
| 214 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 215 | 
            +
                    version: '0'
         | 
| 216 | 
            +
              type: :runtime
         | 
| 217 | 
            +
              prerelease: false
         | 
| 218 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 219 | 
            +
                requirements:
         | 
| 220 | 
            +
                - - ! '>='
         | 
| 221 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 222 | 
            +
                    version: '0'
         | 
| 223 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 224 | 
            +
              name: workers
         | 
| 225 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 226 | 
            +
                requirements:
         | 
| 227 | 
            +
                - - ! '>='
         | 
| 228 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 229 | 
            +
                    version: '0'
         | 
| 230 | 
            +
              type: :runtime
         | 
| 231 | 
            +
              prerelease: false
         | 
| 232 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 233 | 
            +
                requirements:
         | 
| 234 | 
            +
                - - ! '>='
         | 
| 235 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 236 | 
            +
                    version: '0'
         | 
| 209 237 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 210 238 | 
             
              name: gym
         | 
| 211 239 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -338,6 +366,7 @@ files: | |
| 338 366 | 
             
            - config/locales/en.yml
         | 
| 339 367 | 
             
            - deploygate.gemspec
         | 
| 340 368 | 
             
            - lib/deploygate.rb
         | 
| 369 | 
            +
            - lib/deploygate/add_devices_server.rb
         | 
| 341 370 | 
             
            - lib/deploygate/android/gradle_deploy.rb
         | 
| 342 371 | 
             
            - lib/deploygate/android/gradle_plugin_installer.rb
         | 
| 343 372 | 
             
            - lib/deploygate/android/gradle_project.rb
         | 
| @@ -346,6 +375,7 @@ files: | |
| 346 375 | 
             
            - lib/deploygate/api/v1/session.rb
         | 
| 347 376 | 
             
            - lib/deploygate/api/v1/user.rb
         | 
| 348 377 | 
             
            - lib/deploygate/api/v1/users/app.rb
         | 
| 378 | 
            +
            - lib/deploygate/api/v1/users/apps/cli_websockets.rb
         | 
| 349 379 | 
             
            - lib/deploygate/browser_login.rb
         | 
| 350 380 | 
             
            - lib/deploygate/command_builder.rb
         | 
| 351 381 | 
             
            - lib/deploygate/commands/add_devices.rb
         |