canalizador 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b11c9e9444d032b08b9b065ade997b418c7422de3785adfd7be301de03d3fb18
4
+ data.tar.gz: b50e2b4bf730d8c3d760b5b1bb29e0de9395262ca1962cb82205e33c4cbe4fd7
5
+ SHA512:
6
+ metadata.gz: dbd743084104a46bdf8e69531d7a442b8a4bebedc7c847b3ad9dcdaa3e4a47f9373f95ab032951ee1aa9f21998133304790efc7b7cb17f457958b4e9d38eca5a
7
+ data.tar.gz: fdadd990c878137bf560bc54ee58166627886e110eafb490cfc39b96b15eb26e9607fd0a21a31cdf19faf882c03e4d4efc9065a40b707d40ae647d00dc5b1a7d
data/bin/canalizador ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'canalizador'
6
+ require 'canalizador/version'
7
+
8
+ case ARGV[0]
9
+ when 'generate_release_notes'
10
+ puts Canalizador.generate_release_notes(ARGV[1], ARGV[2])
11
+ when 'upload_certificates_and_profiles'
12
+ puts Canalizador.upload_certificates_and_profiles(ARGV[1])
13
+ when 'fetch_certificates_and_profiles'
14
+ app_bundle_ids = ARGV[1].split(',')
15
+ puts Canalizador.fetch_certificates_and_profiles(app_bundle_ids)
16
+ else
17
+ puts 'need to specify which runner'
18
+ end
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'canalizador'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require 'pry'
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'match'
4
+
5
+ require_relative 'utils'
6
+
7
+ module Canalizador
8
+ class IosUtils
9
+ def self.upload_certificates_and_profiles(type)
10
+ Canalizador::Utils.validate_environment_variables(
11
+ 'IOS_PROFILES_AND_CERTIFICATES_TO_UPLOAD_PATH',
12
+ 'IOS_PROFILES_AND_CERTIFICATES_REPO_URL',
13
+ 'MATCH_PASSWORD'
14
+ )
15
+
16
+ files_to_upload_path = ENV['IOS_PROFILES_AND_CERTIFICATES_TO_UPLOAD_PATH']
17
+ git_url = ENV['IOS_PROFILES_AND_CERTIFICATES_REPO_URL']
18
+
19
+ # STORAGE
20
+ storage = Match::Storage.for_mode(
21
+ 'git',
22
+ {
23
+ git_url: git_url,
24
+ shallow_clone: false,
25
+ git_branch: 'master',
26
+ clone_branch_directly: false
27
+ }
28
+ )
29
+ storage.download
30
+
31
+ # ENCRYPTION
32
+ encryption = Match::Encryption.for_storage_mode(
33
+ 'git',
34
+ { git_url: git_url, working_directory: storage.working_directory }
35
+ )
36
+ encryption.decrypt_files
37
+
38
+ certifcates_folder = nil
39
+ case type
40
+ when 'development'
41
+ certifcates_folder = 'development'
42
+ when 'adhoc'
43
+ certifcates_folder = 'distribution'
44
+ when 'appstore'
45
+ certifcates_folder = 'distribution'
46
+ end
47
+
48
+ # CERTIFICATES
49
+ files_to_upload_dir = Dir["#{files_to_upload_path}/*.{cer,p12}"]
50
+ files_to_upload_dir.each do |filename|
51
+ name = File.basename(filename)
52
+ dest_file = "#{storage.working_directory}/certs/#{certifcates_folder}/#{name}"
53
+ FileUtils.cp(filename, dest_file)
54
+ end
55
+
56
+ # PROFILES
57
+ files_to_upload_dir = Dir["#{files_to_upload_path}/*.{mobileprovision,provisionprofile}"]
58
+ files_to_upload_dir.each do |filename|
59
+ name = File.basename(filename)
60
+ dest_file = "#{storage.working_directory}/profiles/#{type}/#{name}"
61
+ FileUtils.cp(filename, dest_file)
62
+ end
63
+
64
+ # COMMITING
65
+ encryption.encrypt_files
66
+ files_to_commit = Dir[File.join(storage.working_directory, '**', '*.{cer,p12,mobileprovision,provisionprofile}')]
67
+ storage.save_changes!(files_to_commit: files_to_commit)
68
+ end
69
+
70
+ def self.fetch_certificates_and_profiles(app_bundle_ids)
71
+ Canalizador::Utils.validate_environment_variables(
72
+ 'IOS_PROFILES_AND_CERTIFICATES_REPO_URL',
73
+ 'MATCH_PASSWORD'
74
+ )
75
+
76
+ git_url(ENV['IOS_PROFILES_AND_CERTIFICATES_REPO_URL'])
77
+
78
+ match(app_identifier: app_bundle_ids, type: 'development', readonly: true, generate_apple_certs: false)
79
+ match(app_identifier: app_bundle_ids, type: 'adhoc', readonly: true, generate_apple_certs: false)
80
+ match(app_identifier: app_bundle_ids, type: 'appstore', readonly: true, generate_apple_certs: false)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'json'
5
+ require 'base64'
6
+
7
+ require_relative 'utils'
8
+
9
+ module Canalizador
10
+ class JiraUtils
11
+ def self.fetch_jira_issues(branch, version)
12
+ Canalizador::Utils.validate_environment_variables(
13
+ 'JIRA_URL',
14
+ 'JIRA_PROJECT_SLUG',
15
+ 'JIRA_USERNAME',
16
+ 'JIRA_PASSWORD'
17
+ )
18
+
19
+ url = if branch == 'develop'
20
+ URI.parse("#{ENV['JIRA_URL']}/rest/api/3/search?jql=project=#{ENV['JIRA_PROJECT_SLUG']} AND status='Ready for Feature Testing'&fields=issuetype,summary")
21
+ else
22
+ URI.parse("#{ENV['JIRA_URL']}/rest/api/3/search?jql=project=#{ENV['JIRA_PROJECT_SLUG']} AND fixVersion='#{version}'&fields=issuetype,summary")
23
+ end
24
+
25
+ request = Net::HTTP::Get.new(url.request_uri)
26
+ request.basic_auth(ENV['JIRA_USERNAME'], ENV['JIRA_PASSWORD'])
27
+
28
+ response = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http|
29
+ http.request(request)
30
+ end
31
+
32
+ if response.code == '200'
33
+ json_response = JSON.parse(response.body)
34
+
35
+ issues = json_response['issues']
36
+
37
+ issues.map do |issue|
38
+ issue_code = issue['key']
39
+ issue_type = issue['fields']['issuetype']['name']
40
+ issue_name = issue['fields']['summary']
41
+
42
+ "- [#{issue_type}]#{issue_code} - #{issue_name}"
43
+ end
44
+ else
45
+ puts "Request failed with HTTP status code #{response.code}"
46
+ []
47
+ end
48
+ end
49
+
50
+ def self.generate_release_notes(branch, version)
51
+ issues = fetch_jira_issues(branch, version)
52
+
53
+ if issues.empty?
54
+ 'No issues found'
55
+ else
56
+ "Version #{version} Issues:\n" + issues.join("\n")
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,11 @@
1
+ module Canalizador
2
+ class Utils
3
+ def self.validate_environment_variables(*variables)
4
+ missing_variables = variables.reject { |var| ENV[var] }
5
+
6
+ return if missing_variables.empty?
7
+
8
+ raise "Missing environment variables: #{missing_variables.join(', ')}"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Canalizador
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dotenv'
4
+ Dotenv.load
5
+
6
+ require_relative 'canalizador/version'
7
+ require_relative 'canalizador/jira_utils'
8
+ require_relative 'canalizador/ios_utils'
9
+
10
+ module Canalizador
11
+ def self.generate_release_notes(branch, version)
12
+ JiraUtils.generate_release_notes(branch, version)
13
+ end
14
+
15
+ def self.upload_certificates_and_profiles(type)
16
+ IosUtils.upload_certificates_and_profiles(type)
17
+ end
18
+
19
+ def self.fetch_certificates_and_profiles(app_bundle_ids)
20
+ IosUtils.fetch_certificates_and_profiles(app_bundle_ids)
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: canalizador
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Gaspard+Bruno
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-06-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dotenv
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.7.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.7.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: fastlane
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: httparty
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.20.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.20.0
55
+ description: Collection of utils for mobile apps pipelines that include Jira and iOS
56
+ utils.
57
+ email:
58
+ - hello@gaspardbruno.com
59
+ executables:
60
+ - canalizador
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - bin/canalizador
65
+ - bin/console
66
+ - bin/setup
67
+ - lib/canalizador.rb
68
+ - lib/canalizador/ios_utils.rb
69
+ - lib/canalizador/jira_utils.rb
70
+ - lib/canalizador/utils.rb
71
+ - lib/canalizador/version.rb
72
+ homepage: https://github.com/Gaspard-Bruno/canalizador
73
+ licenses:
74
+ - MIT
75
+ metadata:
76
+ homepage_uri: https://github.com/Gaspard-Bruno/canalizador
77
+ source_code_uri: https://github.com/Gaspard-Bruno/canalizador
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 2.6.0
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubygems_version: 3.3.7
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Collection of utils for mobile apps pipelines.
97
+ test_files: []