lib/fastlane/actions/mailgun.rb



require 'fastlane/erb_template_helper'

module Fastlane
  module Actions
    class MailgunAction < Action

      def self.is_supported?(platform)
        true
      end

      def self.run(options)
        require 'rest_client'
        handle_params_transition(options)
        mailgunit(options)
      end

      def self.description
        "Send a success/error message to an email group"
      end

      def self.available_options
        [
          # This is here just for while due to the transition, not needed anymore
          FastlaneCore::ConfigItem.new(key: :mailgun_sandbox_domain,
                                       env_name: "MAILGUN_SANDBOX_POSTMASTER",
                                       optional: true,
                                       description: "Mailgun sandbox domain postmaster for your mail. Please use postmaster instead"),
          # This is here just for while due to the transition, should use postmaster instead
          FastlaneCore::ConfigItem.new(key: :mailgun_sandbox_postmaster,
                                       env_name: "MAILGUN_SANDBOX_POSTMASTER",
                                       optional: true,
                                       description: "Mailgun sandbox domain postmaster for your mail. Please use postmaster instead"),
          # This is here just for while due to the transition, should use apikey instead
          FastlaneCore::ConfigItem.new(key: :mailgun_apikey,
                                       env_name: "MAILGUN_APIKEY",
                                       optional: true,
                                       description: "Mailgun apikey for your mail. Please use postmaster instead"),

          FastlaneCore::ConfigItem.new(key: :postmaster,
                                       env_name: "MAILGUN_SANDBOX_POSTMASTER",
                                       description: "Mailgun sandbox domain postmaster for your mail"),
          FastlaneCore::ConfigItem.new(key: :apikey,
                                       env_name: "MAILGUN_APIKEY",
                                       description: "Mailgun apikey for your mail"),
          FastlaneCore::ConfigItem.new(key: :to,
                                       env_name: "MAILGUN_TO",
                                       description: "Destination of your mail"),
          FastlaneCore::ConfigItem.new(key: :message,
                                       env_name: "MAILGUN_MESSAGE",
                                       description: "Message of your mail"),
          FastlaneCore::ConfigItem.new(key: :subject,
                                       env_name: "MAILGUN_SUBJECT",
                                       description: "Subject of your mail",
                                       optional: true,
                                       is_string: true,
                                       default_value: "fastlane build"),
          FastlaneCore::ConfigItem.new(key: :success,
                                      env_name: "MAILGUN_SUCCESS",
                                      description: "Was this build successful? (true/false)",
                                      optional: true,
                                      default_value: true,
                                      is_string: false),
          FastlaneCore::ConfigItem.new(key: :app_link,
                                      env_name: "MAILGUN_APP_LINK",
                                      description: "App Release link",
                                      optional: false,
                                      is_string: true),
          FastlaneCore::ConfigItem.new(key: :ci_build_link,
                                      env_name: "MAILGUN_CI_BUILD_LINK",
                                      description: "CI Build Link",
                                      optional: true,
                                      is_string: true)

        ]
      end

      def self.author
        "thiagolioy"
      end

      def self.handle_params_transition(options)
        options[:postmaster] = options[:mailgun_sandbox_postmaster] if options[:mailgun_sandbox_postmaster]
        puts "\nUsing :mailgun_sandbox_postmaster is deprecated, please change to :postmaster".yellow

        options[:apikey] = options[:mailgun_apikey] if options[:mailgun_apikey]
        puts "\nUsing :mailgun_apikey is deprecated, please change to :apikey".yellow
      end

      def self.mailgunit(options)
        sandbox_domain = options[:postmaster].split("@").last
        RestClient.post "https://api:#{options[:apikey]}@api.mailgun.net/v3/#{sandbox_domain}/messages",
                        from: "Mailgun Sandbox<#{options[:postmaster]}>",
                        to: "#{options[:to]}",
                        subject: options[:subject],
                        html: mail_teplate(options)
        mail_teplate(options)
      end

      def self.mail_teplate(options)
        hash = {
          author: Actions.git_author,
          last_commit: Actions.last_git_commit,
          message: options[:message],
          app_link: options[:app_link]
        }
        hash[:success] = options[:success] if options[:success]
        hash[:ci_build_link] = options[:success] if options[:ci_build_link]
        Fastlane::ErbTemplateHelper.render(
          Fastlane::ErbTemplateHelper.load("mailgun_html_template"),
          hash
        )
      end

    end
  end
end