1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ /*
6
+ * This file is part of the Gitlab API library.
7
+ *
8
+ * (c) Matt Humphrey <[email protected] >
9
+ * (c) Graham Campbell <[email protected] >
10
+ *
11
+ * For the full copyright and license information, please view the LICENSE
12
+ * file that was distributed with this source code.
13
+ */
14
+
15
+ namespace Gitlab \Api ;
16
+
17
+ use Symfony \Component \OptionsResolver \Options ;
18
+ use Symfony \Component \OptionsResolver \OptionsResolver ;
19
+
20
+ class Registry extends AbstractApi
21
+ {
22
+ /**
23
+ * @see https://docs.gitlab.com/ee/api/container_registry.html#get-details-of-a-single-repository
24
+ *
25
+ * @param int|string $repository_id The ID of the registry repository accessible by the authenticated user.
26
+ * @param array $parameters {
27
+ * @var bool $tags
28
+ * @var bool $tags_count
29
+ * @var bool $size
30
+ * }
31
+ * @return mixed
32
+ */
33
+ public function repositories ($ repository_id , array $ parameters = [])
34
+ {
35
+ $ resolver = $ this ->createOptionsResolver ();
36
+ $ booleanNormalizer = function (Options $ resolver , $ value ): string {
37
+ return $ value ? 'true ' : 'false ' ;
38
+ };
39
+
40
+ $ resolver ->setDefined ('tags ' )
41
+ ->setAllowedTypes ('tags ' , 'bool ' )
42
+ ->setNormalizer ('tags ' , $ booleanNormalizer );
43
+ $ resolver ->setDefined ('tags_count ' )
44
+ ->setAllowedTypes ('tags_count ' , 'bool ' )
45
+ ->setNormalizer ('tags_count ' , $ booleanNormalizer );
46
+ $ resolver ->setDefined ('size ' )
47
+ ->setAllowedTypes ('size ' , 'bool ' )
48
+ ->setNormalizer ('size ' , $ booleanNormalizer );
49
+
50
+ return $ this ->get ('registry/repositories/ ' .self ::encodePath ($ repository_id ), $ resolver ->resolve ($ parameters ));
51
+ }
52
+
53
+ /**
54
+ * @see https://docs.gitlab.com/ee/api/container_registry.html#list-registry-repository-tags
55
+ *
56
+ * @param int|string $project_id
57
+ * @param int $repository_id
58
+ * @return mixed
59
+ */
60
+ public function repositoryTags ($ project_id , int $ repository_id )
61
+ {
62
+ return $ this ->get (
63
+ $ this ->getProjectPath ($ project_id , 'registry/repositories/ ' .self ::encodePath ($ repository_id ).'/tags ' )
64
+ );
65
+ }
66
+
67
+
68
+ /**
69
+ * @see https://docs.gitlab.com/ee/api/container_registry.html#get-details-of-a-registry-repository-tag
70
+ *
71
+ * @param int|string $project_id
72
+ * @param int $repository_id
73
+ * @param string $tag_name
74
+ * @return mixed
75
+ */
76
+ public function repositoryTag ($ project_id , int $ repository_id , string $ tag_name )
77
+ {
78
+ return $ this ->get (
79
+ $ this ->getProjectPath (
80
+ $ project_id ,
81
+ 'registry/repositories/ ' .self ::encodePath ($ repository_id ).'/tags/ ' .self ::encodePath ($ tag_name )
82
+ )
83
+ );
84
+ }
85
+
86
+
87
+ /**
88
+ * @see https://docs.gitlab.com/ee/api/container_registry.html#delete-a-registry-repository-tag
89
+ *
90
+ * @param int|string $project_id
91
+ * @param int $repository_id
92
+ * @param string $tag_name
93
+ * @return mixed
94
+ */
95
+ public function removeRepositoryTag ($ project_id , int $ repository_id , string $ tag_name )
96
+ {
97
+ return $ this ->delete (
98
+ $ this ->getProjectPath (
99
+ $ project_id ,
100
+ 'registry/repositories/ ' .self ::encodePath ($ repository_id ).'/tags/ ' .self ::encodePath ($ tag_name )
101
+ )
102
+ );
103
+ }
104
+
105
+ /**
106
+ * @see https://docs.gitlab.com/ee/api/container_registry.html#delete-registry-repository-tags-in-bulk
107
+ *
108
+ * @param int|string $project_id
109
+ * @param int $repository_id
110
+ * @param array $parameters {
111
+ * @var string $name_regex_delete
112
+ * @var string $name_regex_keep
113
+ * @var int $keep_n
114
+ * @var string $older_than
115
+ * }
116
+ * @return mixed
117
+ */
118
+ public function removeRepositoryTags ($ project_id , int $ repository_id , array $ parameters = [])
119
+ {
120
+ $ resolver = $ this ->createOptionsResolver ();
121
+ $ resolver ->setRequired ('name_regex_delete ' )
122
+ ->setAllowedTypes ('name_regex_delete ' , 'string ' );
123
+ $ resolver ->setDefined ('name_regex_keep ' )
124
+ ->setAllowedTypes ('name_regex_keep ' , 'string ' );
125
+ $ resolver ->setDefined ('keep_n ' )
126
+ ->setAllowedTypes ('keep_n ' , 'int ' );
127
+ $ resolver ->setDefined ('older_than ' )
128
+ ->setAllowedTypes ('older_than ' , 'string ' );
129
+
130
+
131
+ return $ this ->delete (
132
+ $ this ->getProjectPath (
133
+ $ project_id ,
134
+ 'registry/repositories/ ' .self ::encodePath ($ repository_id ).'/tags '
135
+ ),
136
+ $ resolver ->resolve ($ parameters )
137
+ );
138
+ }
139
+ }
0 commit comments