@jfrog/opencode-jfrog-plugin 0.0.2 → 0.0.4
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.
- package/README.md +105 -51
- package/dist/index.js +30 -238
- package/package.json +6 -6
- package/skills/jfrog/SKILL.md +529 -0
- package/skills/jfrog/assets/.gitkeep +0 -0
- package/skills/jfrog/references/apptrust-entities.md +154 -0
- package/skills/jfrog/references/artifactory-api-gaps.md +206 -0
- package/skills/jfrog/references/artifactory-aql-syntax.md +656 -0
- package/skills/jfrog/references/artifactory-entities.md +236 -0
- package/skills/jfrog/references/artifactory-operations.md +178 -0
- package/skills/jfrog/references/catalog-entities.md +219 -0
- package/skills/jfrog/references/general-bulk-operations-and-agent-patterns.md +93 -0
- package/skills/jfrog/references/general-parallel-execution.md +131 -0
- package/skills/jfrog/references/general-use-case-hints.md +27 -0
- package/skills/jfrog/references/jfrog-brand-html-report.md +98 -0
- package/skills/jfrog/references/jfrog-cli-install-upgrade.md +30 -0
- package/skills/jfrog/references/jfrog-entity-index.md +112 -0
- package/skills/jfrog/references/jfrog-login-flow.md +132 -0
- package/skills/jfrog/references/jfrog-url-references.md +51 -0
- package/skills/jfrog/references/onemodel-common-patterns.md +323 -0
- package/skills/jfrog/references/onemodel-graphql.md +446 -0
- package/skills/jfrog/references/onemodel-query-examples.md +753 -0
- package/skills/jfrog/references/platform-access-entities.md +200 -0
- package/skills/jfrog/references/platform-admin-api-gaps.md +164 -0
- package/skills/jfrog/references/platform-admin-operations.md +58 -0
- package/skills/jfrog/references/projects-api.md +241 -0
- package/skills/jfrog/references/release-lifecycle-entities.md +180 -0
- package/skills/jfrog/references/stored-packages-entities.md +165 -0
- package/skills/jfrog/references/xray-entities.md +740 -0
- package/skills/jfrog/scripts/check-environment.sh +224 -0
- package/skills/jfrog/scripts/jfrog-login-register-session.sh +84 -0
- package/skills/jfrog/scripts/jfrog-login-save-credentials.sh +128 -0
- package/skills/jfrog-package-safety-and-download/SKILL.md +275 -0
- package/sync-skills-vendor.json +5 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Release lifecycle entities
|
|
2
|
+
|
|
3
|
+
When to read this file:
|
|
4
|
+
|
|
5
|
+
- Working with **release bundles** (create, promote, distribute, delete).
|
|
6
|
+
- Understanding the **lifecycle stages** a release bundle passes through.
|
|
7
|
+
- Setting up **distribution** to Edge nodes or other Platform Deployments.
|
|
8
|
+
- Working with **evidence** (supply chain attestations).
|
|
9
|
+
- Mapping CLI commands (`rbc`, `rbp`, `rbd`, etc.) to their lifecycle meaning.
|
|
10
|
+
|
|
11
|
+
## Entity relationship overview
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
flowchart TD
|
|
15
|
+
Artifacts[Artifacts in Artifactory] -->|assembled into| RB[Release Bundle v2]
|
|
16
|
+
Build[Build Info] -->|can source artifacts for| RB
|
|
17
|
+
RB -->|promoted through| Stages[Lifecycle Stages]
|
|
18
|
+
Stages -->|promotion gates via| Env[Environments]
|
|
19
|
+
RB -->|distributed to| Edge[Edge Nodes]
|
|
20
|
+
RB -->|attested by| Evd[Evidence]
|
|
21
|
+
Xray -->|scans| RB
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Release Bundles (v2)
|
|
25
|
+
|
|
26
|
+
A release bundle is an **immutable, versioned collection of artifacts**
|
|
27
|
+
assembled from Artifactory. It represents a releasable unit that moves through
|
|
28
|
+
lifecycle stages toward production.
|
|
29
|
+
|
|
30
|
+
| Field | Description |
|
|
31
|
+
|-------|-------------|
|
|
32
|
+
| `name` | Bundle name (e.g. `my-app`) |
|
|
33
|
+
| `version` | Semantic or custom version string (e.g. `1.2.0`) |
|
|
34
|
+
| `artifacts` | Set of artifacts referenced by repo path and checksum |
|
|
35
|
+
| `created` | Timestamp of creation |
|
|
36
|
+
| `status` | Current lifecycle status |
|
|
37
|
+
|
|
38
|
+
Bundles can be assembled from:
|
|
39
|
+
- **AQL queries** — dynamically select artifacts matching criteria
|
|
40
|
+
- **Build info** — include all artifacts from a published build
|
|
41
|
+
- **Explicit list** — specify repo paths directly
|
|
42
|
+
|
|
43
|
+
Once created, a bundle's artifact list is **immutable** — the same version
|
|
44
|
+
always refers to the exact same set of artifacts. This is enforced by
|
|
45
|
+
checksums.
|
|
46
|
+
|
|
47
|
+
> **v1 vs v2:** Release Bundle v1 was managed by the Distribution service and
|
|
48
|
+
> is deprecated. Release Bundle v2 is managed by the Lifecycle service and is
|
|
49
|
+
> the current model. The CLI `rbc`/`rbp`/`rbd` commands default to v2.
|
|
50
|
+
|
|
51
|
+
### CLI commands
|
|
52
|
+
|
|
53
|
+
| Command | Operation | Description |
|
|
54
|
+
|---------|-----------|-------------|
|
|
55
|
+
| `jf rbc` | Create | Assemble a new release bundle version |
|
|
56
|
+
| `jf rbp` | Promote | Move a bundle to the next lifecycle stage |
|
|
57
|
+
| `jf rbd` | Distribute | Deliver a bundle to target nodes |
|
|
58
|
+
| `jf rbs` | Sign | (v1 only — v2 signs on creation) |
|
|
59
|
+
| `jf rbdell` | Delete local | Remove a bundle version locally |
|
|
60
|
+
| `jf rbdelr` | Delete remote | Remove a distributed bundle from targets |
|
|
61
|
+
|
|
62
|
+
## Lifecycle stages
|
|
63
|
+
|
|
64
|
+
A release bundle progresses through **stages** that typically correspond to
|
|
65
|
+
environments (DEV → STAGING → PROD). Each stage transition is a **promotion**.
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
Created ──promote──▶ DEV ──promote──▶ STAGING ──promote──▶ PROD
|
|
69
|
+
│
|
|
70
|
+
distribute
|
|
71
|
+
▼
|
|
72
|
+
Edge Nodes
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Promotion (`jf rbp`):
|
|
76
|
+
- Moves the bundle to a target **environment**
|
|
77
|
+
- Requires the bundle to have passed any required quality gates (Xray scans, approvals)
|
|
78
|
+
- Each promotion is **recorded** with timestamp, user, source and target environment
|
|
79
|
+
- Promotions are auditable — the full history is preserved
|
|
80
|
+
|
|
81
|
+
Environments used in promotion are the same environments configured in the
|
|
82
|
+
platform (see `platform-access-entities.md`). They scope which repos are
|
|
83
|
+
accessible and which roles apply at each stage.
|
|
84
|
+
|
|
85
|
+
## Distribution
|
|
86
|
+
|
|
87
|
+
Distribution delivers a release bundle to **Edge nodes** or other JFrog
|
|
88
|
+
Platform Deployments.
|
|
89
|
+
|
|
90
|
+
| Concept | Description |
|
|
91
|
+
|---------|-------------|
|
|
92
|
+
| **Distribution target** | A JFrog Edge node or Platform Deployment registered to receive bundles |
|
|
93
|
+
| **Distribution rules** | Configuration mapping targets to the bundle version being delivered |
|
|
94
|
+
| **Site** | A named destination in the distribution rule |
|
|
95
|
+
|
|
96
|
+
Distribution (`jf rbd`) copies the bundle's artifacts to the target nodes,
|
|
97
|
+
preserving checksums and metadata. The target nodes receive the artifacts in
|
|
98
|
+
their local repositories.
|
|
99
|
+
|
|
100
|
+
Distribution is typically the **final step** after a bundle has been promoted
|
|
101
|
+
to a production-ready stage.
|
|
102
|
+
|
|
103
|
+
## Release Bundles in GraphQL (OneModel)
|
|
104
|
+
|
|
105
|
+
Release bundle versions are also queryable via the OneModel GraphQL API
|
|
106
|
+
which exposes additional relationships not available
|
|
107
|
+
through the CLI:
|
|
108
|
+
|
|
109
|
+
| Field | Description |
|
|
110
|
+
|-------|-------------|
|
|
111
|
+
| `createdBy`, `createdAt` | Audit fields |
|
|
112
|
+
| `artifactsConnection` | Paginated artifacts with path, name, sha256, packageType, packageName, packageVersion, size, properties |
|
|
113
|
+
| `evidenceConnection` | Evidence attached to the bundle version |
|
|
114
|
+
| `fromBuilds` | Builds that sourced the bundle (name, number, startedAt, repositoryKey) |
|
|
115
|
+
|
|
116
|
+
Each artifact within a bundle also has its own `evidenceConnection`, allowing
|
|
117
|
+
per-artifact attestation queries.
|
|
118
|
+
|
|
119
|
+
For the OneModel query workflow (credentials, schema fetch, validation,
|
|
120
|
+
execution), read `references/onemodel-graphql.md`.
|
|
121
|
+
|
|
122
|
+
Query: `releaseBundleVersion.getReleaseBundleVersion(name: "...", version: "...", ...)`.
|
|
123
|
+
|
|
124
|
+
## Evidence
|
|
125
|
+
|
|
126
|
+
Evidence provides **cryptographic attestations** about artifacts, builds,
|
|
127
|
+
release bundles, application versions, and stored packages for supply chain
|
|
128
|
+
integrity.
|
|
129
|
+
|
|
130
|
+
### Evidence entity
|
|
131
|
+
|
|
132
|
+
| Field | Description |
|
|
133
|
+
|-------|-------------|
|
|
134
|
+
| `evidenceId` | Unique identifier |
|
|
135
|
+
| `subject` | The entity being attested (see Evidence subjects below) |
|
|
136
|
+
| `predicateCategory` | Category (e.g. `distribution`) |
|
|
137
|
+
| `predicateType` | Full type URI (e.g. `https://jfrog.com/evidence/distribution/v1`) |
|
|
138
|
+
| `predicateSlug` | Short form (e.g. `distribution-v1`) |
|
|
139
|
+
| `predicate` | Predicate data as JSON |
|
|
140
|
+
| `verified` | Whether the evidence signature has been verified |
|
|
141
|
+
| `signingKey` | Signing key with `alias` and `publicKey` for DSSE verification |
|
|
142
|
+
| `providerId` | ID of the evidence provider |
|
|
143
|
+
| `stageName` | Stage in which evidence was created (for release bundles and app versions) |
|
|
144
|
+
| `createdBy`, `createdAt` | Audit fields |
|
|
145
|
+
| `attachments` | File attachments (e.g. legal documents) with name, sha256, type, downloadPath |
|
|
146
|
+
|
|
147
|
+
Evidence records create a verifiable chain of trust:
|
|
148
|
+
- Build systems attest to build provenance
|
|
149
|
+
- Test frameworks attest to test results
|
|
150
|
+
- Approvers attest to manual reviews
|
|
151
|
+
- Security scans attest to vulnerability status
|
|
152
|
+
- Distribution records attest to delivery
|
|
153
|
+
|
|
154
|
+
### Evidence subjects
|
|
155
|
+
|
|
156
|
+
Evidence subjects are **cross-domain** — the `EvidenceSubject` type is shared
|
|
157
|
+
across multiple domains via the `fullPath` key:
|
|
158
|
+
|
|
159
|
+
| Subject type | Domain | Example |
|
|
160
|
+
|-------------|--------|---------|
|
|
161
|
+
| Release bundle version | Release Lifecycle | Bundle attestation before distribution |
|
|
162
|
+
| Release bundle artifact | Release Lifecycle | Per-artifact attestation within a bundle |
|
|
163
|
+
| Application version | AppTrust | App version attestation before promotion |
|
|
164
|
+
| Application version artifact | AppTrust | Per-artifact attestation within an app version |
|
|
165
|
+
| Stored package version location | Stored Packages | Package attestation at a specific repo location |
|
|
166
|
+
|
|
167
|
+
This means evidence can be queried from any of these entry points — you don't
|
|
168
|
+
need to start from the Evidence query root. For example,
|
|
169
|
+
`applications.getApplicationVersion(...).evidenceSubject` reaches the same
|
|
170
|
+
evidence as `evidence.searchEvidence(where: {...})`.
|
|
171
|
+
|
|
172
|
+
### CLI and GraphQL access
|
|
173
|
+
|
|
174
|
+
- **CLI**: `jf evd` namespace. Use `jf evd --help` for available commands.
|
|
175
|
+
- **GraphQL**: `evidence.searchEvidence(where: {...})`,
|
|
176
|
+
`evidence.getEvidenceById(id: "...")`, or
|
|
177
|
+
`evidence.getEvidence(repositoryKey: "...", path: "...", name: "...")`.
|
|
178
|
+
|
|
179
|
+
Evidence can be queried to verify that all required attestations exist before
|
|
180
|
+
promotion or distribution.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Stored Packages entities (Metadata)
|
|
2
|
+
|
|
3
|
+
When to read this file:
|
|
4
|
+
|
|
5
|
+
- Querying **packages stored in Artifactory** at the package level (not raw artifacts).
|
|
6
|
+
- Finding **where a package version lives** (which repository, which path).
|
|
7
|
+
- Looking up **download statistics**, **tags**, or **qualifiers** on packages.
|
|
8
|
+
- Using the OneModel GraphQL API with the `storedPackages` query root.
|
|
9
|
+
- Understanding how the **Metadata layer bridges** Artifactory storage with
|
|
10
|
+
Applications and Catalog.
|
|
11
|
+
|
|
12
|
+
Stored Packages entities are accessed via the **OneModel GraphQL API**
|
|
13
|
+
(`/onemodel/api/v1/graphql`).
|
|
14
|
+
|
|
15
|
+
For the OneModel query workflow (credentials, schema fetch, validation,
|
|
16
|
+
execution), read `references/onemodel-graphql.md`.
|
|
17
|
+
|
|
18
|
+
## Entity relationship overview
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
erDiagram
|
|
22
|
+
StoredPackage ||--o{ StoredPackageVersion : "has versions"
|
|
23
|
+
StoredPackageVersion ||--o{ StoredPackageVersionLocation : "stored at"
|
|
24
|
+
StoredPackageVersion ||--o{ StoredPackageArtifact : "contains"
|
|
25
|
+
StoredPackageVersionLocation ||--o{ StoredPackageArtifact : "has artifacts"
|
|
26
|
+
StoredPackageVersionLocation }o--o| EvidenceSubject : "attested by"
|
|
27
|
+
StoredPackage }o--o{ StoredPackageTag : "tagged with"
|
|
28
|
+
StoredPackage }o--o{ StoredPackageQualifier : "qualified by"
|
|
29
|
+
StoredPackageVersion }o--o{ StoredPackageVersionTag : "tagged with"
|
|
30
|
+
StoredPackageVersion }o--o{ StoredPackageVersionQualifier : "qualified by"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## StoredPackage
|
|
34
|
+
|
|
35
|
+
A software package as known to Artifactory's metadata layer. This is the
|
|
36
|
+
**package-centric abstraction** over raw artifact storage — it groups related
|
|
37
|
+
artifacts into named, typed, versioned packages.
|
|
38
|
+
|
|
39
|
+
| Field | Description |
|
|
40
|
+
|-------|-------------|
|
|
41
|
+
| `name` | Package name (e.g. `lodash`, `spring-boot-starter-web`) |
|
|
42
|
+
| `type` | Package type (`npm`, `maven`, `docker`, `pypi`, etc.) |
|
|
43
|
+
| `repositoryPackageType` | Canonicalized Artifactory repo type enum (see below) |
|
|
44
|
+
| `description` | Package description |
|
|
45
|
+
| `versionsCount` | Number of known versions |
|
|
46
|
+
| `latestVersionName` | Most recent version string |
|
|
47
|
+
| `respectsSemver` | Whether versions follow semver |
|
|
48
|
+
| `tags` | Package-level tags |
|
|
49
|
+
| `qualifiers` | Key-value qualifiers |
|
|
50
|
+
| `stats` | Download count |
|
|
51
|
+
| `createdAt`, `modifiedAt` | Timestamps |
|
|
52
|
+
|
|
53
|
+
Query: `storedPackages.getPackage(name: "...", type: "...")` or
|
|
54
|
+
`storedPackages.searchPackages(where: {...})`.
|
|
55
|
+
|
|
56
|
+
### Repository package type mapping
|
|
57
|
+
|
|
58
|
+
The `repositoryPackageType` enum canonicalizes Artifactory repo types. Notable
|
|
59
|
+
aliases:
|
|
60
|
+
|
|
61
|
+
| Artifactory type | Enum value |
|
|
62
|
+
|------------------|------------|
|
|
63
|
+
| `golang` | `GO` |
|
|
64
|
+
| `rpm` | `YUM` |
|
|
65
|
+
| `rubygems` | `GEMS` |
|
|
66
|
+
| `deb`, `dsc` | `DEBIAN` |
|
|
67
|
+
| `terraformprovider`, `terraformmodule` | `TERRAFORM` |
|
|
68
|
+
| `hfdataset` | `HUGGINGFACEML` |
|
|
69
|
+
|
|
70
|
+
The full enum includes 40+ types. Use `repositoryPackageType` for filtering
|
|
71
|
+
when the Artifactory repo type name differs from the canonical form.
|
|
72
|
+
|
|
73
|
+
## StoredPackageVersion
|
|
74
|
+
|
|
75
|
+
A specific version of a package, with location and artifact details.
|
|
76
|
+
|
|
77
|
+
| Field | Description |
|
|
78
|
+
|-------|-------------|
|
|
79
|
+
| `package` | Parent StoredPackage |
|
|
80
|
+
| `version` | Version string |
|
|
81
|
+
| `versionSize` | Total size in bytes |
|
|
82
|
+
| `tags` | Version-level tags |
|
|
83
|
+
| `qualifiers` | Version-level key-value qualifiers |
|
|
84
|
+
| `stats` | Download count |
|
|
85
|
+
| `createdAt`, `modifiedAt` | Timestamps |
|
|
86
|
+
|
|
87
|
+
Connections:
|
|
88
|
+
- `locationsConnection` — where this version is stored (repos + paths)
|
|
89
|
+
- `artifactsConnection` — binary artifacts in this version
|
|
90
|
+
|
|
91
|
+
Query: `storedPackages.searchPackageVersions(where: {...})`.
|
|
92
|
+
|
|
93
|
+
### Filtering capabilities
|
|
94
|
+
|
|
95
|
+
StoredPackageVersion supports rich filtering:
|
|
96
|
+
- By version string (exact, prefix, contains)
|
|
97
|
+
- By project key
|
|
98
|
+
- By creation/modification date ranges
|
|
99
|
+
- By version size
|
|
100
|
+
- By associated tags, qualifiers, locations, artifacts, licenses
|
|
101
|
+
- `ignorePreRelease` flag to exclude pre-release versions
|
|
102
|
+
|
|
103
|
+
## StoredPackageVersionLocation
|
|
104
|
+
|
|
105
|
+
The **bridge entity** connecting a package version to a physical repository
|
|
106
|
+
location in Artifactory. This is the key entity for answering "where does
|
|
107
|
+
package X version Y live?"
|
|
108
|
+
|
|
109
|
+
| Field | Description |
|
|
110
|
+
|-------|-------------|
|
|
111
|
+
| `repositoryKey` | Artifactory repository key |
|
|
112
|
+
| `repositoryType` | Repository class |
|
|
113
|
+
| `packageVersion` | Parent version |
|
|
114
|
+
| `leadArtifactPath` | Path of the primary artifact |
|
|
115
|
+
| `leadArtifactSha256` | Checksum of the primary artifact |
|
|
116
|
+
| `evidenceSubject` | Evidence attestation anchor (shared across domains) |
|
|
117
|
+
| `stats` | Location-specific download count and last-downloaded timestamps |
|
|
118
|
+
|
|
119
|
+
The `evidenceSubject` field connects to the Evidence domain — evidence can be
|
|
120
|
+
attached to a specific package version in a specific repo, not just to the
|
|
121
|
+
version globally.
|
|
122
|
+
|
|
123
|
+
The `stats` block includes `downloadCount`, `lastDownloadedAt`, and
|
|
124
|
+
`remoteLastDownloadedAt` — the last field tracks when the artifact was last
|
|
125
|
+
fetched from a remote repository source.
|
|
126
|
+
|
|
127
|
+
## StoredPackageArtifact
|
|
128
|
+
|
|
129
|
+
An individual binary file within a package version.
|
|
130
|
+
|
|
131
|
+
| Field | Description |
|
|
132
|
+
|-------|-------------|
|
|
133
|
+
| `name` | File name |
|
|
134
|
+
| `sha256` | SHA-256 checksum (primary identifier) |
|
|
135
|
+
| `sha1`, `md5` | Additional checksums |
|
|
136
|
+
| `size` | Size in bytes |
|
|
137
|
+
| `mimeType` | Content type |
|
|
138
|
+
| `qualifiers` | Artifact-level key-value qualifiers |
|
|
139
|
+
|
|
140
|
+
Filtering supports `isLeadArtifact` to identify the primary artifact in a
|
|
141
|
+
package version, and `projectKey` for project-scoped queries.
|
|
142
|
+
|
|
143
|
+
## Cross-domain connections
|
|
144
|
+
|
|
145
|
+
Stored Packages bridge Artifactory storage to higher-level domains:
|
|
146
|
+
|
|
147
|
+
- **Applications (AppTrust)** — `ApplicationVersionReleasable.packageVersionLocation`
|
|
148
|
+
links to `StoredPackageVersionLocation`. Applications reference where their
|
|
149
|
+
package releasables physically reside.
|
|
150
|
+
- **Evidence** — `StoredPackageVersionLocation.evidenceSubject` connects to
|
|
151
|
+
the Evidence domain via `EvidenceSubject.fullPath`. Evidence can attest to
|
|
152
|
+
a specific package version at a specific repository location.
|
|
153
|
+
- **Catalog** — Stored Packages represent what's *in your Artifactory*, while
|
|
154
|
+
the Catalog represents the global knowledge base *about* those packages.
|
|
155
|
+
The package `type` + `name` can join across both.
|
|
156
|
+
|
|
157
|
+
## Stored Packages vs. raw Artifactory
|
|
158
|
+
|
|
159
|
+
| Aspect | Stored Packages | Artifactory (REST/CLI) |
|
|
160
|
+
|--------|------------------------|------------------------|
|
|
161
|
+
| **Abstraction** | Package-centric (name + type + version) | File-centric (repo + path + name) |
|
|
162
|
+
| **Access** | GraphQL only | REST + CLI (`jf rt`) |
|
|
163
|
+
| **Versioning** | Built-in version model | Directory conventions per package type |
|
|
164
|
+
| **Locations** | Explicit location entity per version | Implicit via file path |
|
|
165
|
+
| **Use case** | Package inventory, cross-repo queries, application binding | File operations, repo management, builds |
|