takelage 0.9.0 → 0.9.1
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 +4 -4
- data/README.md +3 -2
- data/lib/takelage/default.yml +19 -5
- data/lib/takelage/docker/container/check/module.rb +6 -10
- data/lib/takelage/docker/container/cli.rb +2 -2
- data/lib/takelage/docker/container/module.rb +53 -55
- data/lib/takelage/docker/image/cli.rb +1 -1
- data/lib/takelage/docker/image/module.rb +9 -3
- data/lib/takelage/docker/image/tag/check/cli.rb +1 -1
- data/lib/takelage/docker/image/tag/check/module.rb +8 -6
- data/lib/takelage/docker/image/tag/latest/cli.rb +1 -1
- data/lib/takelage/docker/image/tag/list/cli.rb +1 -1
- data/lib/takelage/docker/image/tag/list/module.rb +6 -4
- data/lib/takelage/lib/system.rb +1 -1
- data/lib/takelage/version +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d4e9f1786e7e4c7d21e9cada3ed8f29b332aba1e9a4c9d6ad9883aad14aa643
|
4
|
+
data.tar.gz: 73028ac09504b53a127cc8c02d9b7d912e1e24962513955f08fe401f2ab2931f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff27f4263162d199b3aa7f9f54ee01b8eb537e3dc6f9a260689fa499f9fdc6e700483657d5d2b72198d431a3ca454c8a4cbc07e256c354bc538fe7bb5395bf86
|
7
|
+
data.tar.gz: 49dd92f06b1ad60f87f1af59ac96b6ad3fbc17005de3eaf29c748e396fd88d2232a1db4e0b7bd2e3400e6fb6fae8acba82c49b15ae15aa450a0c823f8840f386
|
data/README.md
CHANGED
@@ -16,6 +16,7 @@ The takelage devops framework consists of these projects:
|
|
16
16
|
|
17
17
|
| App | Description |
|
18
18
|
| --- | ----------- |
|
19
|
+
| *[takelage-doc](https://github.com/geospin-takelage/takelage-doc)* | takelage documentation |
|
19
20
|
| *[takelage-dev](https://github.com/geospin-takelage/takelage-dev)* | takelage development environment |
|
20
21
|
| *[takelage-var](https://github.com/geospin-takelage/takelage-var)* | takelage test plugin |
|
21
22
|
| *[takelage-cli](https://github.com/geospin-takelage/takelage-cli)* | takelage command line interface |
|
@@ -30,7 +31,7 @@ through the [gem](https://github.com/rubygems/rubygems)
|
|
30
31
|
command line tool:
|
31
32
|
|
32
33
|
```bash
|
33
|
-
gem install takelage
|
34
|
+
gem install takelage
|
34
35
|
```
|
35
36
|
|
36
37
|
## Commands
|
@@ -140,7 +141,7 @@ to overwrite defaults like:
|
|
140
141
|
|
141
142
|
```yaml
|
142
143
|
---
|
143
|
-
|
144
|
+
docker_repo: takelage-mock
|
144
145
|
```
|
145
146
|
|
146
147
|
### Project Files
|
data/lib/takelage/default.yml
CHANGED
@@ -5,22 +5,34 @@ bit_dev: 'takelage'
|
|
5
5
|
bit_export_to_scope: 'bit export --skip-update %{scope}'
|
6
6
|
bit_export_all: 'bit export --skip-update --all'
|
7
7
|
bit_import_all: 'bit import --ignore-package-json --ignore-dist --skip-update'
|
8
|
-
bit_import_cid: 'bit import --ignore-package-json --ignore-dist -
|
8
|
+
bit_import_cid: 'bit import --ignore-package-json --ignore-dist --skip-update --path %{dir} %{cid}'
|
9
9
|
bit_list_remotes: 'bit remote --skip-update'
|
10
10
|
bit_list_scope: 'bit list --skip-update --json %{scope}'
|
11
11
|
bit_remote: ''
|
12
12
|
bit_repo: 'bit list'
|
13
13
|
bit_scope_root: '/bit'
|
14
14
|
bit_scope_list: 'find -L %{root} -name scope.json'
|
15
|
-
bit_scope_new: 'mkdir -p %{root}/%{scope} && cd %{root}/%{scope} && bit init
|
16
|
-
bit_scope_remove: 'rm
|
15
|
+
bit_scope_new: 'mkdir -p %{root}/%{scope} && cd %{root}/%{scope} && bit init --bare'
|
16
|
+
bit_scope_remove: 'rm --force --recursive %{root}/%{scope}'
|
17
17
|
bit_ssh: ''
|
18
18
|
bit_tag_id: 'bit tag --skip-update --skip-tests %{id}'
|
19
19
|
bit_tag_all: 'bit tag --skip-update --skip-tests --all'
|
20
|
+
docker_create: 'docker run --detach --env GEOSPIN_PROJECT_BASE_DIR=%{workdir} --env GOOGLE_APPLICATION_CREDENTIALS=/srv/google/default.json --env TAKELAGE_PROJECT_BASE_DIR=%{workdir} --env TZ=%{timezone} --hostname %{container} --name %{container} --network %{container} --privileged --rm --tty --volume %{dockersock}:/var/run/docker.sock --volume %{homedir}/.config/gcloud:/srv/gcloud --volume %{homedir}/.google:/srv/google --volume %{homedir}:/homedir --volume %{workdir}:/project %{volume_dev} --workdir /project %{image} %{entrypoint} --gid %{gid} --home %{homedir} --uid %{uid} --username %{username}'
|
21
|
+
docker_create_network: 'docker network create %{network}'
|
20
22
|
docker_debug: 'ansible/roles/takel-takelage/files/pyscripts'
|
21
|
-
|
22
|
-
|
23
|
+
docker_enter: 'docker exec --interactive --tty %{container} %{loginpoint} --username %{username}'
|
24
|
+
docker_existing: 'docker ps --filter name=^%{container}$ --quiet'
|
25
|
+
docker_get: 'docker ps --all --filter name=^%{docker_repo}_ --quiet'
|
26
|
+
docker_get_container_name_by_id: 'docker ps --filter id=%{container} --format "{{.Names}}"'
|
23
27
|
docker_repo: 'takelage'
|
28
|
+
docker_images: 'docker images --quiet %{image}'
|
29
|
+
docker_info: 'docker info'
|
30
|
+
docker_network: 'docker network ls --quiet --filter name=^%{network}$'
|
31
|
+
docker_orphaned: 'docker exec --interactive %{container} ps a'
|
32
|
+
docker_pull_latest: 'docker pull %{docker_user}/%{docker_repo}:%{tag_latest_remote}'
|
33
|
+
docker_remove_network: 'docker network rm %{network}'
|
34
|
+
docker_user: 'takelage'
|
35
|
+
docker_run_command: 'docker exec %{container} su %{username} -c "LANG=en_US.UTF-8 %{command}"'
|
24
36
|
docker_socket_agent_port: 20000
|
25
37
|
docker_socket_agent_ssh_port: 20001
|
26
38
|
docker_socket_agent_extra_port: 20002
|
@@ -29,7 +41,9 @@ docker_socket_ps: 'sudo ps a -o pid,command'
|
|
29
41
|
docker_socket_gpgconf: 'gpgconf --list-dirs'
|
30
42
|
docker_socket_kill: 'sudo kill -SIGTERM %{pid}'
|
31
43
|
docker_socket_start: 'sudo socat TCP-LISTEN:%{port},bind=%{host},reuseaddr,fork UNIX-CLIENT:%{path}'
|
44
|
+
docker_stop: 'docker stop %{container}'
|
32
45
|
docker_tag: 'latest'
|
46
|
+
docker_tags: 'docker images %{docker_user}\/%{docker_repo} --format "{{.Tag}}"'
|
33
47
|
docker_tagsurl: 'https://hub.docker.com/v2/repositories/takelage/takelage/tags'
|
34
48
|
git_branch: 'git symbolic-ref HEAD'
|
35
49
|
git_repo: 'git -C . rev-parse'
|
@@ -8,9 +8,8 @@ module DockerContainerCheckModule
|
|
8
8
|
|
9
9
|
return false unless docker_check_running
|
10
10
|
|
11
|
-
cmd_docker_existing =
|
12
|
-
|
13
|
-
'--quiet'
|
11
|
+
cmd_docker_existing =
|
12
|
+
config.active['docker_existing'] % {container: container}
|
14
13
|
|
15
14
|
stdout_str = run cmd_docker_existing
|
16
15
|
|
@@ -30,9 +29,8 @@ module DockerContainerCheckModule
|
|
30
29
|
|
31
30
|
return false unless docker_check_running
|
32
31
|
|
33
|
-
cmd_docker_network =
|
34
|
-
'
|
35
|
-
"--filter name=^#{network}$"
|
32
|
+
cmd_docker_network =
|
33
|
+
config.active['docker_network'] % {network: network}
|
36
34
|
|
37
35
|
stdout_str = run cmd_docker_network
|
38
36
|
|
@@ -52,10 +50,8 @@ module DockerContainerCheckModule
|
|
52
50
|
|
53
51
|
return false unless docker_check_running
|
54
52
|
|
55
|
-
cmd_docker_orphaned =
|
56
|
-
'
|
57
|
-
"#{container} " +
|
58
|
-
'ps a'
|
53
|
+
cmd_docker_orphaned =
|
54
|
+
config.active['docker_orphaned'] % {container: container}
|
59
55
|
|
60
56
|
stdout_str = run cmd_docker_orphaned
|
61
57
|
|
@@ -22,8 +22,8 @@ module Takelage
|
|
22
22
|
|
23
23
|
@docker_debug = config.active['docker_debug']
|
24
24
|
|
25
|
+
@docker_user = config.active['docker_user']
|
25
26
|
@docker_repo = config.active['docker_repo']
|
26
|
-
@docker_image = config.active['docker_image']
|
27
27
|
@docker_tag = config.active['docker_tag']
|
28
28
|
|
29
29
|
@dockersock = '/var/run/docker.sock'
|
@@ -34,7 +34,7 @@ module Takelage
|
|
34
34
|
|
35
35
|
@homedir = ENV['HOME'] ? ENV['HOME'] : '/tmp'
|
36
36
|
@workdir = Dir.getwd
|
37
|
-
@hostname = "#{@
|
37
|
+
@hostname = "#{@docker_repo}_#{File.basename(@workdir)}"
|
38
38
|
|
39
39
|
@timezone = 'Europe/Berlin'
|
40
40
|
|
@@ -7,7 +7,7 @@ module DockerContainerModule
|
|
7
7
|
|
8
8
|
return false unless docker_check_running
|
9
9
|
|
10
|
-
return false unless configured? %w(docker_repo
|
10
|
+
return false unless configured? %w(docker_user docker_repo docker_tag)
|
11
11
|
|
12
12
|
docker_socket_start
|
13
13
|
|
@@ -22,7 +22,7 @@ module DockerContainerModule
|
|
22
22
|
|
23
23
|
return false unless docker_check_running
|
24
24
|
|
25
|
-
return false unless configured? %w(docker_repo
|
25
|
+
return false unless configured? %w(docker_user docker_repo docker_tag)
|
26
26
|
|
27
27
|
_create_network @hostname unless docker_container_check_network @hostname
|
28
28
|
_create_container @hostname unless docker_container_check_existing @hostname
|
@@ -34,7 +34,7 @@ module DockerContainerModule
|
|
34
34
|
|
35
35
|
return false unless docker_check_running
|
36
36
|
|
37
|
-
return false unless configured? %w(docker_repo
|
37
|
+
return false unless configured? %w(docker_user docker_repo docker_tag)
|
38
38
|
|
39
39
|
docker_socket_start
|
40
40
|
|
@@ -49,7 +49,7 @@ module DockerContainerModule
|
|
49
49
|
|
50
50
|
return false unless docker_check_running
|
51
51
|
|
52
|
-
return false unless configured? %w(
|
52
|
+
return false unless configured? %w(docker_repo)
|
53
53
|
|
54
54
|
networks = []
|
55
55
|
|
@@ -70,7 +70,7 @@ module DockerContainerModule
|
|
70
70
|
|
71
71
|
return false unless docker_check_running
|
72
72
|
|
73
|
-
return false unless configured? %w(
|
73
|
+
return false unless configured? %w(docker_repo)
|
74
74
|
|
75
75
|
networks = []
|
76
76
|
|
@@ -97,7 +97,7 @@ module DockerContainerModule
|
|
97
97
|
tag = docker_image_tag_latest_local
|
98
98
|
end
|
99
99
|
|
100
|
-
image = "#{@
|
100
|
+
image = "#{@docker_user}/#{@docker_repo}:#{tag}"
|
101
101
|
|
102
102
|
log.debug "Using docker image \"#{image}\""
|
103
103
|
|
@@ -113,31 +113,20 @@ module DockerContainerModule
|
|
113
113
|
volume_dev = "--volume #{@workdir}/#{@docker_debug}:/debug "
|
114
114
|
end
|
115
115
|
|
116
|
-
cmd_docker_create =
|
117
|
-
'
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
"--volume #{@homedir}/.google:/srv/google " +
|
131
|
-
"--volume #{@homedir}:/homedir " +
|
132
|
-
"--volume #{@workdir}:/project " +
|
133
|
-
volume_dev +
|
134
|
-
'--workdir /project ' +
|
135
|
-
"#{image} " +
|
136
|
-
entrypoint +
|
137
|
-
"--gid #{@gid} " +
|
138
|
-
"--home #{@homedir} " +
|
139
|
-
"--uid #{@uid} " +
|
140
|
-
"--username #{@username}"
|
116
|
+
cmd_docker_create =
|
117
|
+
config.active['docker_create'] % {
|
118
|
+
workdir: @workdir,
|
119
|
+
timezone: @timezone,
|
120
|
+
container: container,
|
121
|
+
dockersock: @dockersock,
|
122
|
+
homedir: @homedir,
|
123
|
+
volume_dev: volume_dev,
|
124
|
+
image: image,
|
125
|
+
entrypoint: entrypoint,
|
126
|
+
gid: @gid,
|
127
|
+
uid: @uid,
|
128
|
+
username: @username
|
129
|
+
}
|
141
130
|
|
142
131
|
run cmd_docker_create
|
143
132
|
end
|
@@ -146,8 +135,10 @@ module DockerContainerModule
|
|
146
135
|
def _create_network(network)
|
147
136
|
log.debug "Create network \"#{network}\""
|
148
137
|
|
149
|
-
cmd_create_network =
|
150
|
-
|
138
|
+
cmd_create_network =
|
139
|
+
config.active['docker_create_network'] % {
|
140
|
+
network: network
|
141
|
+
}
|
151
142
|
|
152
143
|
run cmd_create_network
|
153
144
|
end
|
@@ -161,12 +152,12 @@ module DockerContainerModule
|
|
161
152
|
loginpoint = '/loginpoint.py --debug '
|
162
153
|
end
|
163
154
|
|
164
|
-
cmd_docker_enter =
|
165
|
-
'
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
155
|
+
cmd_docker_enter =
|
156
|
+
config.active['docker_enter'] % {
|
157
|
+
container: container,
|
158
|
+
loginpoint: loginpoint,
|
159
|
+
username: @username
|
160
|
+
}
|
170
161
|
|
171
162
|
run_and_exit cmd_docker_enter
|
172
163
|
end
|
@@ -175,9 +166,10 @@ module DockerContainerModule
|
|
175
166
|
def _get_container_name_by_id container
|
176
167
|
log.debug "Getting name of container \"#{container}\""
|
177
168
|
|
178
|
-
cmd_get_container_name_by_id =
|
179
|
-
|
180
|
-
|
169
|
+
cmd_get_container_name_by_id =
|
170
|
+
config.active['docker_get_container_name_by_id'] % {
|
171
|
+
container: container
|
172
|
+
}
|
181
173
|
|
182
174
|
stdout_str = run cmd_get_container_name_by_id
|
183
175
|
|
@@ -191,12 +183,12 @@ module DockerContainerModule
|
|
191
183
|
# Get all docker containers.
|
192
184
|
# @return [Array] list of docker containers
|
193
185
|
def _get_containers
|
194
|
-
log.debug "Getting all containers of image \"#{@
|
186
|
+
log.debug "Getting all containers of image \"#{@docker_repo}\""
|
195
187
|
|
196
|
-
cmd_docker_get =
|
197
|
-
'
|
198
|
-
|
199
|
-
|
188
|
+
cmd_docker_get =
|
189
|
+
config.active['docker_get'] % {
|
190
|
+
docker_repo: @docker_repo
|
191
|
+
}
|
200
192
|
|
201
193
|
stdout_str = run cmd_docker_get
|
202
194
|
|
@@ -208,8 +200,10 @@ module DockerContainerModule
|
|
208
200
|
def _remove_network network
|
209
201
|
log.debug "Remove network \"#{network}\""
|
210
202
|
|
211
|
-
cmd_remove_network =
|
212
|
-
|
203
|
+
cmd_remove_network =
|
204
|
+
config.active['docker_remove_network'] % {
|
205
|
+
network: network
|
206
|
+
}
|
213
207
|
|
214
208
|
run cmd_remove_network
|
215
209
|
end
|
@@ -218,10 +212,12 @@ module DockerContainerModule
|
|
218
212
|
def _run_command_in_container(container, command)
|
219
213
|
log.debug "Running command \"#{command}\" in container \"#{container}\""
|
220
214
|
|
221
|
-
cmd_docker_run_command =
|
222
|
-
|
223
|
-
|
224
|
-
|
215
|
+
cmd_docker_run_command =
|
216
|
+
config.active['docker_run_command'] % {
|
217
|
+
container: container,
|
218
|
+
username: @username,
|
219
|
+
command: command
|
220
|
+
}
|
225
221
|
|
226
222
|
run_and_exit cmd_docker_run_command
|
227
223
|
end
|
@@ -230,8 +226,10 @@ module DockerContainerModule
|
|
230
226
|
def _stop_container(container)
|
231
227
|
log.debug "Stopping container \"#{container}\""
|
232
228
|
|
233
|
-
cmd_docker_stop =
|
234
|
-
|
229
|
+
cmd_docker_stop =
|
230
|
+
config.active['docker_stop'] % {
|
231
|
+
container: container
|
232
|
+
}
|
235
233
|
|
236
234
|
run cmd_docker_stop
|
237
235
|
end
|
@@ -17,8 +17,8 @@ module Takelage
|
|
17
17
|
# initialize thor parent class
|
18
18
|
super args, local_options, configuration
|
19
19
|
|
20
|
+
@docker_user = config.active['docker_user']
|
20
21
|
@docker_repo = config.active['docker_repo']
|
21
|
-
@docker_image = config.active['docker_image']
|
22
22
|
@docker_tagsurl = config.active['docker_tagsurl']
|
23
23
|
end
|
24
24
|
|
@@ -5,7 +5,7 @@ module DockerImageModule
|
|
5
5
|
def docker_image_update
|
6
6
|
return false unless docker_check_running
|
7
7
|
|
8
|
-
return false unless configured? %w(docker_repo
|
8
|
+
return false unless configured? %w(docker_user docker_repo docker_tagsurl)
|
9
9
|
|
10
10
|
tag_latest_remote = docker_image_tag_latest_remote
|
11
11
|
|
@@ -23,9 +23,15 @@ module DockerImageModule
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
log.info "Updating to docker image \"#{@
|
26
|
+
log.info "Updating to docker image \"#{@docker_user}/#{@docker_repo}:#{tag_latest_remote}\""
|
27
|
+
|
28
|
+
cmd_docker_pull_latest =
|
29
|
+
config.active['docker_pull_latest'] % {
|
30
|
+
docker_user: @docker_user,
|
31
|
+
docker_repo: @docker_repo,
|
32
|
+
tag_latest_remote: tag_latest_remote
|
33
|
+
}
|
27
34
|
|
28
|
-
cmd_docker_pull_latest = "docker pull #{@docker_repo}/#{@docker_image}:#{tag_latest_remote}"
|
29
35
|
run_and_exit cmd_docker_pull_latest
|
30
36
|
end
|
31
37
|
end
|
@@ -16,8 +16,8 @@ module Takelage
|
|
16
16
|
# initialize thor parent class
|
17
17
|
super args, local_options, configuration
|
18
18
|
|
19
|
+
@docker_user = config.active['docker_user']
|
19
20
|
@docker_repo = config.active['docker_repo']
|
20
|
-
@docker_image = config.active['docker_image']
|
21
21
|
@docker_tagsurl = config.active['docker_tagsurl']
|
22
22
|
end
|
23
23
|
|
@@ -8,17 +8,19 @@ module DockerImageTagCheckModule
|
|
8
8
|
|
9
9
|
return false unless docker_check_running
|
10
10
|
|
11
|
-
return false unless configured? %w(docker_repo
|
11
|
+
return false unless configured? %w(docker_user docker_repo)
|
12
12
|
|
13
13
|
if tag.to_s.strip.empty?
|
14
14
|
log.warn "No local docker image tag specified"
|
15
15
|
return false
|
16
16
|
end
|
17
17
|
|
18
|
-
image = "#{@
|
18
|
+
image = "#{@docker_user}/#{@docker_repo}:#{tag}"
|
19
19
|
|
20
|
-
cmd_docker_images =
|
21
|
-
|
20
|
+
cmd_docker_images =
|
21
|
+
config.active['docker_images'] % {
|
22
|
+
image: image
|
23
|
+
}
|
22
24
|
|
23
25
|
stdout_str = run cmd_docker_images
|
24
26
|
|
@@ -38,14 +40,14 @@ module DockerImageTagCheckModule
|
|
38
40
|
|
39
41
|
return false unless docker_check_running
|
40
42
|
|
41
|
-
return false unless configured? %w(docker_repo
|
43
|
+
return false unless configured? %w(docker_user docker_repo docker_tagsurl)
|
42
44
|
|
43
45
|
if tag .to_s.strip.empty?
|
44
46
|
log.warn "No remote docker image tag specified"
|
45
47
|
return false
|
46
48
|
end
|
47
49
|
|
48
|
-
image = "#{@
|
50
|
+
image = "#{@docker_user}/#{@docker_repo}:#{tag}"
|
49
51
|
|
50
52
|
tags = docker_image_tag_list_remote
|
51
53
|
|
@@ -16,8 +16,8 @@ module Takelage
|
|
16
16
|
# initialize thor parent class
|
17
17
|
super args, local_options, configuration
|
18
18
|
|
19
|
+
@docker_user = config.active['docker_user']
|
19
20
|
@docker_repo = config.active['docker_repo']
|
20
|
-
@docker_image = config.active['docker_image']
|
21
21
|
@docker_tagsurl = config.active['docker_tagsurl']
|
22
22
|
end
|
23
23
|
|
@@ -15,8 +15,8 @@ module Takelage
|
|
15
15
|
# initialize thor parent class
|
16
16
|
super args, local_options, configuration
|
17
17
|
|
18
|
+
@docker_user = config.active['docker_user']
|
18
19
|
@docker_repo = config.active['docker_repo']
|
19
|
-
@docker_image = config.active['docker_image']
|
20
20
|
@docker_tagsurl = config.active['docker_tagsurl']
|
21
21
|
end
|
22
22
|
|
@@ -6,11 +6,13 @@ module DockerImageTagListModule
|
|
6
6
|
def docker_image_tag_list_local
|
7
7
|
tags = []
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
cmd_docker_tags =
|
10
|
+
config.active['docker_tags'] % {
|
11
|
+
docker_user: @docker_user,
|
12
|
+
docker_repo: @docker_repo
|
13
|
+
}
|
12
14
|
|
13
|
-
stdout_str = run
|
15
|
+
stdout_str = run cmd_docker_tags
|
14
16
|
|
15
17
|
tags = stdout_str.split("\n")
|
16
18
|
|
data/lib/takelage/lib/system.rb
CHANGED
data/lib/takelage/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.1
|