makr 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/makr +30 -0
- data/data/makr/Makefile.erb +129 -0
- data/data/makr/config.yaml +29 -0
- metadata +49 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 076c7dd63463df48c5389c5b1410b96993b7f6ce
|
4
|
+
data.tar.gz: 21974afdd058960c3e5513710aa6b2b5ff9f6c98
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0d75c0026787d08e9d4c807a13f722fbffdd543375778179f37abcbbaded7581febe7afdb7014dfb41b6856245b6fbdbdc5139394a102502ee60bef1f7c0783b
|
7
|
+
data.tar.gz: eda93626955a6411aa784277c34fbc09b30f504e640072cd3406c1d51acb4f6df84a48a1f52dfe135197a28a699af87a84398bd5156e24f455ec3a6da9f4dec1
|
data/bin/makr
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
if !File.exist?('config.yaml')
|
7
|
+
puts 'No config.yaml found- outputting config.yaml template'
|
8
|
+
|
9
|
+
config = IO.read("#{Gem.datadir('makr')}/config.yaml")
|
10
|
+
File.open('config.yaml', 'w') do |f|
|
11
|
+
f.write config
|
12
|
+
end
|
13
|
+
|
14
|
+
puts 'config.yaml created, please edit and run again.'
|
15
|
+
abort
|
16
|
+
end
|
17
|
+
|
18
|
+
puts 'Reading config.yaml'
|
19
|
+
config = YAML.load_file("config.yaml")
|
20
|
+
template = IO.read("#{Gem.datadir('makr')}/Makefile.erb")
|
21
|
+
|
22
|
+
puts 'Generating Makefile'
|
23
|
+
makefile_string = ERB.new(template, nil, '-').result(binding)
|
24
|
+
|
25
|
+
puts 'Writing Makefile'
|
26
|
+
File.open("Makefile", "w") do |f|
|
27
|
+
f.write makefile_string
|
28
|
+
end
|
29
|
+
|
30
|
+
puts 'Done'
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# Path for built products
|
2
|
+
ARTIFACTS_PATH = artifacts
|
3
|
+
|
4
|
+
# Path for dSYMs
|
5
|
+
DSYMS_PATH = $(ARTIFACTS_PATH)/dsyms
|
6
|
+
|
7
|
+
# Path for built archives
|
8
|
+
ARCHIVES_PATH = $(ARTIFACTS_PATH)/archives
|
9
|
+
|
10
|
+
# Path for built IPAs
|
11
|
+
IPAS_PATH = $(ARTIFACTS_PATH)/ipas
|
12
|
+
|
13
|
+
# Provisioning profiles dir
|
14
|
+
PROFILES_DIR = $(CURDIR)/profiles
|
15
|
+
|
16
|
+
# Temporary build dir
|
17
|
+
TEMP_DIR = $(CURDIR)/tmp
|
18
|
+
|
19
|
+
# Build environment vars
|
20
|
+
CONFIGURATION_BUILD_DIR = $(TEMP_DIR)/configuration
|
21
|
+
|
22
|
+
BUILD_ENV_OPTIONS = SHARED_PRECOMPS_DIR="$(TEMP_DIR)/precomps" \
|
23
|
+
TARGET_TEMP_DIR="$(TEMP_DIR)/target/" \
|
24
|
+
CONFIGURATION_BUILD_DIR="$(CONFIGURATION_BUILD_DIR)"
|
25
|
+
|
26
|
+
# Archives
|
27
|
+
ARCHIVES = <% config["archives"].each do |archive| %>$(ARCHIVES_PATH)/<%= archive["name"] %>.xcarchive <% end %>
|
28
|
+
|
29
|
+
# IPAs
|
30
|
+
IPAS = <% config["archives"].each do |archive| -%>
|
31
|
+
<% archive["ipas"].each do |ipa| -%>
|
32
|
+
$(IPAS_PATH)/<%= ipa["name"] %>.ipa <% end -%><% end -%>
|
33
|
+
|
34
|
+
# Get current version
|
35
|
+
CURRENT_VERSION=$(shell agvtool what-version -terse)
|
36
|
+
|
37
|
+
# If build number if defined and it's different than the current build number
|
38
|
+
# add update-version step to be used for all target
|
39
|
+
ifdef BUILD_NUMBER
|
40
|
+
UPDATE_VERSION = update-version
|
41
|
+
else
|
42
|
+
UPDATE_VERSION=
|
43
|
+
endif
|
44
|
+
|
45
|
+
# Updates project version if needed and generates all IPAs
|
46
|
+
all: $(UPDATE_VERSION) $(IPAS)
|
47
|
+
|
48
|
+
# Create profiles directory
|
49
|
+
$(PROFILES_DIR):
|
50
|
+
mkdir $@
|
51
|
+
|
52
|
+
# Install provisioning profiles
|
53
|
+
install-profiles: $(PROFILES_DIR)
|
54
|
+
rsync -av ./profiles/ ~/Library/MobileDevice/Provisioning\ Profiles/
|
55
|
+
|
56
|
+
# Updates project version using agvtool
|
57
|
+
update-version:
|
58
|
+
agvtool new-version -all $(CURRENT_VERSION).$(BUILD_NUMBER)
|
59
|
+
|
60
|
+
<% config["archives"].each do |archive| -%>
|
61
|
+
# Create <%=archive["name"]%>.xcarchive
|
62
|
+
$(ARCHIVES_PATH)/<%=archive["name"]%>.xcarchive:
|
63
|
+
xcodebuild archive $(BUILD_ENV_OPTIONS) \
|
64
|
+
-scheme "<%=archive["scheme"]%>" \
|
65
|
+
<% if archive["workspace"] -%>-workspace "<%= archive["workspace"] %>.xcworkspace" \
|
66
|
+
<% end -%>
|
67
|
+
<% if archive["project"] -%>-project "<%= archive["project"] %>.xcodeproj" \
|
68
|
+
<% end -%>
|
69
|
+
-configuration "<%=archive["configuration"]%>" \
|
70
|
+
-archivePath $@
|
71
|
+
mkdir -p "$(DSYMS_PATH)/<%=archive["name"]%>"
|
72
|
+
cp -r "$(CONFIGURATION_BUILD_DIR)/"*".dSYM" "$(DSYMS_PATH)/<%=archive["name"]%>/"
|
73
|
+
rm -rf $(TEMP_DIR)
|
74
|
+
|
75
|
+
<% archive["ipas"].each do |ipa| -%>
|
76
|
+
# Create <%=ipa["name"]%>.ipa
|
77
|
+
$(IPAS_PATH)/<%=ipa["name"]%>.ipa: $(IPAS_PATH) $(ARCHIVES_PATH)/<%=archive["name"]%>.xcarchive
|
78
|
+
xcodebuild -exportArchive \
|
79
|
+
-exportFormat IPA \
|
80
|
+
-exportProvisioningProfile "<%=ipa["profile"]%>" \
|
81
|
+
-archivePath "$(ARCHIVES_PATH)/<%=archive["name"]%>.xcarchive" \
|
82
|
+
-exportPath "$@"
|
83
|
+
|
84
|
+
<% if ipa["distributions"] != nil -%>
|
85
|
+
<% ipa["distributions"].each do |distribution| -%>
|
86
|
+
<% if distribution["type"] == "testflight" -%>
|
87
|
+
# Upload <%=ipa["name"]%>.ipa to <%=distribution["type"]%>
|
88
|
+
distribute-<%= distribution["name"] %>:
|
89
|
+
curl http://testflightapp.com/api/builds.json \
|
90
|
+
-F file=@'$(IPAS_PATH)/<%= ipa["name"] %>.ipa' \
|
91
|
+
-F api_token='<%= distribution["api-token"] %>' \
|
92
|
+
-F notes='<%= distribution["notes"] %>' \
|
93
|
+
-F team_token='<%= distribution["team-token"] %>' \
|
94
|
+
-F notify='<%= distribution["notify"].to_s %>' \
|
95
|
+
-F distribution_lists='<%= distribution["distribution-list"] %>'
|
96
|
+
|
97
|
+
<% end -%>
|
98
|
+
<% end -%>
|
99
|
+
<% end -%>
|
100
|
+
<% end -%>
|
101
|
+
<% end -%>
|
102
|
+
# Path to built IPAs
|
103
|
+
$(IPAS_PATH):
|
104
|
+
mkdir -p $(IPAS_PATH)
|
105
|
+
|
106
|
+
# Run all distribution tasks
|
107
|
+
distribute-all: <% config["archives"].each do |archive| -%>
|
108
|
+
<% archive["ipas"].each do |ipa| -%>
|
109
|
+
<% if ipa["distributions"] != nil -%>
|
110
|
+
<% ipa["distributions"].each do |distribution| -%>
|
111
|
+
distribute-<%= distribution["name"] -%>
|
112
|
+
<% end -%>
|
113
|
+
<% end -%>
|
114
|
+
<% end -%>
|
115
|
+
<% end -%>
|
116
|
+
|
117
|
+
|
118
|
+
<% if config["tests"] != nil -%>
|
119
|
+
<% config["tests"].each do |test| -%>
|
120
|
+
# Test <%= test["name"] %>
|
121
|
+
test-<%= test["name"] %>:
|
122
|
+
xcodebuild test <% if test["workspace"] -%>-workspace "<%= test["workspace"] %>.xcworkspace"<% end %><% if test["project"] -%>-project "<%= test["project"] %>.xcodeproj"<% end %> -scheme "<%= test["scheme"] %>" -destination platform="<%= test["platform"] %>",OS="<%= test["os"] %>",name="<%= test["device"] %>"
|
123
|
+
<% end -%>
|
124
|
+
<% end -%>
|
125
|
+
|
126
|
+
# Clean artifacts and temp directories
|
127
|
+
clean:
|
128
|
+
rm -rf $(ARTIFACTS_PATH)
|
129
|
+
rm -rf $(TEMP_DIR)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
tests: # List of all tests
|
3
|
+
-
|
4
|
+
name: "my-name" # Name of test. Run with make test-my-name.
|
5
|
+
project: "project" # Name of project. Use this OR workspace.
|
6
|
+
workspace: "workspace" # Name of workspace. Use this OR project.
|
7
|
+
scheme: "scheme" # Scheme to use during test. Make sure it's shared.
|
8
|
+
platform: "platform" # Platform to use for test. e.g. iOS Simulator.
|
9
|
+
os: "os" # OS to use for test. e.g. 8.1.
|
10
|
+
device: "device" # Device to use for test. e.g. iPad 2.
|
11
|
+
archives: # List of all archives.
|
12
|
+
-
|
13
|
+
name: "my-name" # Name of archive. Run with make artifacts/archives/my-name.xcarchive
|
14
|
+
scheme: "scheme" # Scheme to use during archive. Make sure it's shared.
|
15
|
+
configuration: "configuration" # Configuration to use during archive.
|
16
|
+
project: "project-name" # Name of project. Use this OR workspace.
|
17
|
+
workspace: "workspace-name" # Name of workspace. Use this OR project.
|
18
|
+
ipas: # List of all ipas to generate from parent archive
|
19
|
+
-
|
20
|
+
name: "my-name" # Name of ipa. Run with make artifacts/ipas/my-name.ipa
|
21
|
+
profile: "profile-name" # Provisioning profile to use when exporting ipa.
|
22
|
+
distributions: # List of all distributions for the parent ipa
|
23
|
+
-
|
24
|
+
type: "testflight" # Distribution type. testflight is currently the only option.
|
25
|
+
name: "my-name" # Distribution name. Run with make distribute my-name
|
26
|
+
team-token: "team-token" # Testflight team token.
|
27
|
+
api-token: "api-token" # Testflight API token.
|
28
|
+
distribution-list: "list" # Testflight distribution list.
|
29
|
+
notes: "New build!" # Release notes
|
metadata
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: makr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Carter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-21 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Makr reads the config.yaml file in the current directory to generate
|
14
|
+
a Makefile capable of building, testing, and distributing Xcode projects and workspaces.
|
15
|
+
email: andrew.carter@willowtreeapps.com
|
16
|
+
executables:
|
17
|
+
- makr
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- data/makr/Makefile.erb
|
22
|
+
- data/makr/config.yaml
|
23
|
+
- bin/makr
|
24
|
+
homepage: https://github.com/willowtreeapps/Makr
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.0.14
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: A tool to generate a Makefile that builds, tests, and distributes Xcode projects
|
48
|
+
or workspaces.
|
49
|
+
test_files: []
|