gitlab-catalog-browser 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.
Files changed (80) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +75 -0
  3. package/bin/gitlab-ci-cli.js +29 -0
  4. package/dist/api/catalog.d.ts +38 -0
  5. package/dist/api/catalog.d.ts.map +1 -0
  6. package/dist/api/catalog.js +72 -0
  7. package/dist/api/catalog.js.map +1 -0
  8. package/dist/api/gitlab.d.ts +69 -0
  9. package/dist/api/gitlab.d.ts.map +1 -0
  10. package/dist/api/gitlab.js +226 -0
  11. package/dist/api/gitlab.js.map +1 -0
  12. package/dist/api/lint.d.ts +61 -0
  13. package/dist/api/lint.d.ts.map +1 -0
  14. package/dist/api/lint.js +41 -0
  15. package/dist/api/lint.js.map +1 -0
  16. package/dist/cache/schema-cache.d.ts +54 -0
  17. package/dist/cache/schema-cache.d.ts.map +1 -0
  18. package/dist/cache/schema-cache.js +124 -0
  19. package/dist/cache/schema-cache.js.map +1 -0
  20. package/dist/commands/batch.d.ts +19 -0
  21. package/dist/commands/batch.d.ts.map +1 -0
  22. package/dist/commands/batch.js +174 -0
  23. package/dist/commands/batch.js.map +1 -0
  24. package/dist/commands/catalog.d.ts +42 -0
  25. package/dist/commands/catalog.d.ts.map +1 -0
  26. package/dist/commands/catalog.js +158 -0
  27. package/dist/commands/catalog.js.map +1 -0
  28. package/dist/commands/component.d.ts +46 -0
  29. package/dist/commands/component.d.ts.map +1 -0
  30. package/dist/commands/component.js +213 -0
  31. package/dist/commands/component.js.map +1 -0
  32. package/dist/commands/pipeline.d.ts +61 -0
  33. package/dist/commands/pipeline.d.ts.map +1 -0
  34. package/dist/commands/pipeline.js +880 -0
  35. package/dist/commands/pipeline.js.map +1 -0
  36. package/dist/commands/setup.d.ts +119 -0
  37. package/dist/commands/setup.d.ts.map +1 -0
  38. package/dist/commands/setup.js +391 -0
  39. package/dist/commands/setup.js.map +1 -0
  40. package/dist/commands/skills.d.ts +39 -0
  41. package/dist/commands/skills.d.ts.map +1 -0
  42. package/dist/commands/skills.js +208 -0
  43. package/dist/commands/skills.js.map +1 -0
  44. package/dist/commands/validate.d.ts +27 -0
  45. package/dist/commands/validate.d.ts.map +1 -0
  46. package/dist/commands/validate.js +201 -0
  47. package/dist/commands/validate.js.map +1 -0
  48. package/dist/config/loader.d.ts +80 -0
  49. package/dist/config/loader.d.ts.map +1 -0
  50. package/dist/config/loader.js +217 -0
  51. package/dist/config/loader.js.map +1 -0
  52. package/dist/config/types.d.ts +46 -0
  53. package/dist/config/types.d.ts.map +1 -0
  54. package/dist/config/types.js +45 -0
  55. package/dist/config/types.js.map +1 -0
  56. package/dist/index.d.ts +10 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +437 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/output/table.d.ts +28 -0
  61. package/dist/output/table.d.ts.map +1 -0
  62. package/dist/output/table.js +67 -0
  63. package/dist/output/table.js.map +1 -0
  64. package/dist/types/api.d.ts +66 -0
  65. package/dist/types/api.d.ts.map +1 -0
  66. package/dist/types/api.js +61 -0
  67. package/dist/types/api.js.map +1 -0
  68. package/dist/types/catalog.d.ts +77 -0
  69. package/dist/types/catalog.d.ts.map +1 -0
  70. package/dist/types/catalog.js +5 -0
  71. package/dist/types/catalog.js.map +1 -0
  72. package/package.json +60 -0
  73. package/skill-data/core/reference.md +127 -0
  74. package/skill-data/core/templates.md +97 -0
  75. package/skill-data/core/workflows.md +84 -0
  76. package/skill-data/manifest.json +12 -0
  77. package/skill-data/templates/basic-pipeline.yml +29 -0
  78. package/skill-data/templates/docker-build.yml +38 -0
  79. package/skill-data/templates/multi-stage.yml +43 -0
  80. package/skills/gitlab-catalog-browser/SKILL.md +49 -0
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Configuration loader for gitlab-ci-cli.
3
+ *
4
+ * Loads configuration from multiple sources with proper precedence:
5
+ * 1. User config file (~/.gitlab-ci-cli.json) — lowest priority
6
+ * 2. Project config file (./.gitlab-ci-cli.json) — overrides user
7
+ * 3. Environment variables (GITLAB_CI_CLI_*) — overrides files
8
+ * 4. CLI flags — highest priority
9
+ */
10
+ import { readFileSync, existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { homedir } from 'node:os';
13
+ import { DEFAULT_CONFIG, ENV_VAR_MAP, } from './types.js';
14
+ // ──────────────────────────────────────────────
15
+ // Constants
16
+ // ──────────────────────────────────────────────
17
+ const CONFIG_FILENAME = '.gitlab-ci-cli.json';
18
+ /**
19
+ * Known config keys (including optional ones like `token`, `project`).
20
+ * Used to check key membership instead of `in config` since optional
21
+ * keys may not be present in the default config object.
22
+ */
23
+ export const CONFIG_KEYS = [
24
+ 'gitlabUrl',
25
+ 'token',
26
+ 'project',
27
+ 'timeout',
28
+ 'output',
29
+ ];
30
+ // ──────────────────────────────────────────────
31
+ // File loading
32
+ // ──────────────────────────────────────────────
33
+ /**
34
+ * Read and parse a JSON config file.
35
+ * Returns null if the file doesn't exist.
36
+ * Returns a string error message prefixed with 'ERROR:' if the JSON is invalid.
37
+ */
38
+ export function readConfigFile(filePath) {
39
+ if (!existsSync(filePath))
40
+ return null;
41
+ const raw = readFileSync(filePath, 'utf-8');
42
+ try {
43
+ const parsed = JSON.parse(raw);
44
+ // Strip $schema before treating as config
45
+ if (parsed.$schema) {
46
+ delete parsed.$schema;
47
+ }
48
+ return parsed;
49
+ }
50
+ catch (err) {
51
+ const msg = err instanceof Error ? err.message : String(err);
52
+ return `ERROR: Invalid JSON in ${filePath}: ${msg}`;
53
+ }
54
+ }
55
+ /**
56
+ * Safely parse a config file result, returning the parsed config or null.
57
+ * If the result is an error string, it's returned as a warning.
58
+ */
59
+ function parseFileResult(result) {
60
+ if (result === null)
61
+ return { config: null, warning: null };
62
+ if (typeof result === 'string') {
63
+ return { config: null, warning: result };
64
+ }
65
+ return { config: result, warning: null };
66
+ }
67
+ /**
68
+ * Find and load a config file for the given directory.
69
+ * Returns null if no config file exists.
70
+ * Returns a warning string prefixed with 'ERROR:' if invalid JSON.
71
+ */
72
+ export function loadProjectConfig(startDir = process.cwd()) {
73
+ const projectPath = join(startDir, CONFIG_FILENAME);
74
+ return readConfigFile(projectPath);
75
+ }
76
+ /**
77
+ * Load the user-level config file from the home directory.
78
+ * Returns null if no config file exists.
79
+ * Returns a warning string prefixed with 'ERROR:' if invalid JSON.
80
+ */
81
+ export function loadUserConfig() {
82
+ const userPath = join(homedir(), CONFIG_FILENAME);
83
+ return readConfigFile(userPath);
84
+ }
85
+ /**
86
+ * Load both user and project config files.
87
+ * Returns [userConfig, projectConfig] where each may be null or an error string.
88
+ */
89
+ export function loadConfigFiles() {
90
+ return {
91
+ user: loadUserConfig(),
92
+ project: loadProjectConfig(),
93
+ };
94
+ }
95
+ // ──────────────────────────────────────────────
96
+ // Merging
97
+ // ──────────────────────────────────────────────
98
+ /**
99
+ * Merge two config objects.
100
+ * Project-level values override user-level values.
101
+ */
102
+ export function mergeConfigs(base, override) {
103
+ return { ...base, ...override };
104
+ }
105
+ // ──────────────────────────────────────────────
106
+ // Environment variable overrides
107
+ // ──────────────────────────────────────────────
108
+ /**
109
+ * Read environment variables and apply overrides.
110
+ * Returns a partial config with only the env-overridden keys.
111
+ */
112
+ export function readEnvOverrides() {
113
+ const overrides = {};
114
+ const warnings = [];
115
+ for (const mapping of ENV_VAR_MAP) {
116
+ const raw = process.env[mapping.envVar];
117
+ if (raw === undefined || raw === '')
118
+ continue;
119
+ try {
120
+ const value = mapping.parse ? mapping.parse(raw) : raw;
121
+ overrides[mapping.key] = value;
122
+ }
123
+ catch (err) {
124
+ warnings.push(`Warning: ${mapping.envVar}=${raw} could not be parsed: ${err instanceof Error ? err.message : String(err)}`);
125
+ }
126
+ }
127
+ return { overrides, warnings };
128
+ }
129
+ // ──────────────────────────────────────────────
130
+ // Full resolution
131
+ // ──────────────────────────────────────────────
132
+ /**
133
+ * Build the full configuration by applying the precedence chain:
134
+ * 1. Start with defaults
135
+ * 2. Overlay user config file
136
+ * 3. Overlay project config file
137
+ * 4. Overlay environment variables
138
+ * 5. Overlay CLI flags
139
+ *
140
+ * Returns a ResolvedConfig with source tracking and warnings.
141
+ */
142
+ export function getConfig(cliFlags) {
143
+ const warnings = [];
144
+ const sources = {};
145
+ // Track the source of each config key as we go
146
+ const track = (key, source) => {
147
+ sources[key] = source;
148
+ };
149
+ // 1. Start with defaults
150
+ const config = { ...DEFAULT_CONFIG };
151
+ for (const key of Object.keys(DEFAULT_CONFIG)) {
152
+ track(key, 'default');
153
+ }
154
+ // 2. Load config files
155
+ const files = loadConfigFiles();
156
+ // Process user config
157
+ const userResult = parseFileResult(files.user);
158
+ if (userResult.warning) {
159
+ warnings.push(userResult.warning.replace('ERROR:', 'Warning:'));
160
+ }
161
+ if (userResult.config) {
162
+ for (const [key, value] of Object.entries(userResult.config)) {
163
+ if (value !== undefined && CONFIG_KEYS.includes(key)) {
164
+ config[key] = value;
165
+ track(key, 'user-file');
166
+ }
167
+ }
168
+ }
169
+ // Process project config
170
+ const projectResult = parseFileResult(files.project);
171
+ if (projectResult.warning) {
172
+ warnings.push(projectResult.warning.replace('ERROR:', 'Warning:'));
173
+ }
174
+ if (projectResult.config) {
175
+ for (const [key, value] of Object.entries(projectResult.config)) {
176
+ if (value !== undefined && CONFIG_KEYS.includes(key)) {
177
+ config[key] = value;
178
+ track(key, 'project-file');
179
+ }
180
+ }
181
+ }
182
+ // 3. Environment variables
183
+ const { overrides: envOverrides, warnings: envWarnings } = readEnvOverrides();
184
+ warnings.push(...envWarnings);
185
+ for (const [key, value] of Object.entries(envOverrides)) {
186
+ if (value !== undefined && CONFIG_KEYS.includes(key)) {
187
+ config[key] = value;
188
+ track(key, 'env-var');
189
+ }
190
+ }
191
+ // 4. CLI flags
192
+ if (cliFlags) {
193
+ for (const [key, value] of Object.entries(cliFlags)) {
194
+ if (value !== undefined && CONFIG_KEYS.includes(key)) {
195
+ config[key] = value;
196
+ track(key, 'cli-flag');
197
+ }
198
+ }
199
+ }
200
+ return {
201
+ config: config,
202
+ sources: sources,
203
+ warnings,
204
+ };
205
+ }
206
+ // ──────────────────────────────────────────────
207
+ // Convenience: load and get a specific config value
208
+ // ──────────────────────────────────────────────
209
+ /**
210
+ * Quick access to the resolved config for cases where
211
+ * full ResolvedConfig tracking is not needed.
212
+ * Wraps getConfig() and returns just the config object.
213
+ */
214
+ export function loadConfig(cliFlags) {
215
+ return getConfig(cliFlags).config;
216
+ }
217
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Configuration type definitions for gitlab-ci-cli.
3
+ *
4
+ * Defines the config shape, defaults, and type-safe accessors.
5
+ */
6
+ export interface GitLabCIConfig {
7
+ /** GitLab instance URL (default: https://gitlab.com) */
8
+ gitlabUrl: string;
9
+ /** GitLab personal access token */
10
+ token?: string;
11
+ /** Default project path for validation context */
12
+ project?: string;
13
+ /** API request timeout in milliseconds (default: 30000) */
14
+ timeout: number;
15
+ /** Default output format (default: 'table') */
16
+ output: 'table' | 'json';
17
+ }
18
+ export declare const DEFAULT_CONFIG: GitLabCIConfig;
19
+ export type ConfigSource = 'default' | 'user-file' | 'project-file' | 'env-var' | 'cli-flag';
20
+ export interface ConfigEntry<T> {
21
+ value: T;
22
+ source: ConfigSource;
23
+ }
24
+ export interface ResolvedConfig {
25
+ config: GitLabCIConfig;
26
+ /** Per-key source tracking for debugging */
27
+ sources: Record<keyof GitLabCIConfig, ConfigSource>;
28
+ /** List of warnings generated during loading (e.g. invalid JSON) */
29
+ warnings: string[];
30
+ }
31
+ /**
32
+ * Maps environment variable names to config keys.
33
+ * Each tuple is [envVarName, configKey, parser?].
34
+ */
35
+ export declare const ENV_VAR_MAP: Array<{
36
+ envVar: string;
37
+ key: keyof GitLabCIConfig;
38
+ parse?: (raw: string) => unknown;
39
+ }>;
40
+ /**
41
+ * Shape of the raw config file (with optional $schema field).
42
+ */
43
+ export interface RawConfigFile extends Partial<GitLabCIConfig> {
44
+ $schema?: string;
45
+ }
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAEhB,+CAA+C;IAC/C,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,cAAc,EAAE,cAInB,CAAC;AAMX,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AAE7F,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,cAAc,EAAE,YAAY,CAAC,CAAC;IACpD,oEAAoE;IACpE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAClC,CAqBA,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,cAAc,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Configuration type definitions for gitlab-ci-cli.
3
+ *
4
+ * Defines the config shape, defaults, and type-safe accessors.
5
+ */
6
+ // ──────────────────────────────────────────────
7
+ // Defaults
8
+ // ──────────────────────────────────────────────
9
+ export const DEFAULT_CONFIG = {
10
+ gitlabUrl: 'https://gitlab.com',
11
+ timeout: 30000,
12
+ output: 'table',
13
+ };
14
+ // ──────────────────────────────────────────────
15
+ // Environment Variable Mapping
16
+ // ──────────────────────────────────────────────
17
+ /**
18
+ * Maps environment variable names to config keys.
19
+ * Each tuple is [envVarName, configKey, parser?].
20
+ */
21
+ export const ENV_VAR_MAP = [
22
+ { envVar: 'GITLAB_CI_CLI_URL', key: 'gitlabUrl' },
23
+ { envVar: 'GITLAB_CI_CLI_TOKEN', key: 'token' },
24
+ { envVar: 'GITLAB_CI_CLI_PROJECT', key: 'project' },
25
+ {
26
+ envVar: 'GITLAB_CI_CLI_TIMEOUT',
27
+ key: 'timeout',
28
+ parse: (raw) => {
29
+ const n = parseInt(raw, 10);
30
+ if (isNaN(n) || n <= 0)
31
+ throw new Error(`Invalid timeout value: ${raw}`);
32
+ return n;
33
+ },
34
+ },
35
+ {
36
+ envVar: 'GITLAB_CI_CLI_OUTPUT',
37
+ key: 'output',
38
+ parse: (raw) => {
39
+ if (raw !== 'table' && raw !== 'json')
40
+ throw new Error(`Invalid output format: ${raw}. Must be 'table' or 'json'`);
41
+ return raw;
42
+ },
43
+ },
44
+ ];
45
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH,iDAAiD;AACjD,WAAW;AACX,iDAAiD;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,SAAS,EAAE,oBAAoB;IAC/B,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,OAAO;CACP,CAAC;AAqBX,iDAAiD;AACjD,+BAA+B;AAC/B,iDAAiD;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAInB;IACH,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,WAAW,EAAE;IACjD,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE;IAC/C,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG,EAAE,SAAS,EAAE;IACnD;QACE,MAAM,EAAE,uBAAuB;QAC/B,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,CAAC,GAAW,EAAU,EAAE;YAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC;QACX,CAAC;KACF;IACD;QACE,MAAM,EAAE,sBAAsB;QAC9B,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,CAAC,GAAW,EAAoB,EAAE;YACvC,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,6BAA6B,CAAC,CAAC;YACnH,OAAO,GAAG,CAAC;QACb,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * gitlab-catalog-browser — CLI entry point
4
+ *
5
+ * Main entry point for the `gitlab-ci-cli` command.
6
+ * Registers all commands using Commander.js.
7
+ * Loads configuration at startup and makes it available to all commands.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}