From 8e2208530492da01bcd28f1b1c5a38083d154234 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 16 May 2026 15:22:48 +0000 Subject: [PATCH 1/4] Plan emoji manifest support Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/blog-auditor.lock.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 503f9d2028e..2d92fbea9ba 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -1501,6 +1501,7 @@ jobs: GH_AW_SETUP_WORKFLOW_NAME: "Blog Auditor" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/blog-auditor.lock.yml@${{ github.ref }} GH_AW_INFO_VERSION: "2.1.142" + GH_AW_INFO_ENGINE_ID: "claude" - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: From c3d41e3791dec6892478d9c4ea2647998525af7d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 16 May 2026 15:25:18 +0000 Subject: [PATCH 2/4] Add emoji field to aw manifest parsing and schema Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../docs/reference/aw-yml-package-manifest.md | 2 ++ ...epository-package-manifest-specification.md | 10 ++++++++-- pkg/cli/add_package_manifest.go | 7 +++++++ pkg/cli/add_package_manifest_test.go | 18 ++++++++++++++++++ pkg/parser/schemas/aw_manifest_schema.json | 3 +++ 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/src/content/docs/reference/aw-yml-package-manifest.md b/docs/src/content/docs/reference/aw-yml-package-manifest.md index 07a39d19b99..bc41caedfa9 100644 --- a/docs/src/content/docs/reference/aw-yml-package-manifest.md +++ b/docs/src/content/docs/reference/aw-yml-package-manifest.md @@ -28,6 +28,7 @@ The package root is the folder that contains `aw.yml`. | `manifest-version` | string | No | Current supported value: `"1"`. Defaults to `"1"` when omitted. | | `min-version` | string | No | Minimum compatible `gh aw` version in `vMAJOR.minor.patch` form, such as `v0.38.0`. | | `name` | string | Yes | Human-readable package name. Must be non-empty after trimming whitespace. | +| `emoji` | string | No | Optional package emoji for display in package metadata. | | `description` | string | No | Optional package description. `gh aw add` warns when it exceeds 255 characters. | | `files` | array of strings | No | Package-root-relative markdown files under `workflows/` or `.github/workflows/`. | @@ -56,6 +57,7 @@ Missing `README.md` causes package validation to fail. manifest-version: "1" min-version: v0.38.0 name: Repo Assist +emoji: 🤖 description: Friendly repository automation for review and issue triage files: - workflows/review.md diff --git a/docs/src/content/docs/reference/repository-package-manifest-specification.md b/docs/src/content/docs/reference/repository-package-manifest-specification.md index ec637c1bfb2..03c1436e827 100644 --- a/docs/src/content/docs/reference/repository-package-manifest-specification.md +++ b/docs/src/content/docs/reference/repository-package-manifest-specification.md @@ -44,6 +44,7 @@ The manifest document MUST be a YAML mapping. Unknown top-level fields MUST be r | `manifest-version` | string | No | Manifest format version. Defaults to `"1"`. | | `min-version` | string | No | Minimum supported `gh-aw` version. | | `name` | string | Yes | Human-readable package name. | +| `emoji` | string | No | Optional package emoji for display in package metadata. | | `description` | string | No | Human-readable package description. | | `files` | array of strings | No | Explicit installable workflow file list. | @@ -65,13 +66,17 @@ If the running compiler version is lower than `min-version`, validation MUST fai `name` MUST be present and MUST be a non-empty string after trimming surrounding whitespace. -### 4.5 `description` +### 4.5 `emoji` + +If present, `emoji` MUST be a string. + +### 4.6 `description` If present, `description` MUST be a string. Implementations SHOULD warn if `description` exceeds 255 characters. -### 4.6 `files` +### 4.7 `files` If present, `files` MUST be an array of strings. @@ -152,6 +157,7 @@ If JSON output is requested, manifest validation failure still causes an overall ```yaml min-version: v0.38.0 name: Repo Assist +emoji: 🤖 description: Friendly repository automation for review and issue triage files: - workflows/review.md diff --git a/pkg/cli/add_package_manifest.go b/pkg/cli/add_package_manifest.go index 20b60f883fe..5f335eee23d 100644 --- a/pkg/cli/add_package_manifest.go +++ b/pkg/cli/add_package_manifest.go @@ -33,6 +33,7 @@ const repositoryPackageManifestVersion = "1" type resolvedRepositoryPackage struct { ManifestPath string Name string + Emoji string Description string DocsPath string InstallationSource []string @@ -99,6 +100,7 @@ func resolveRepositoryPackage(repoSpec *RepoSpec, host string) (*resolvedReposit return &resolvedRepositoryPackage{ ManifestPath: manifestPath, Name: manifest.Name, + Emoji: manifest.Emoji, Description: manifest.Description, DocsPath: docsPath, InstallationSource: installationSources, @@ -128,6 +130,7 @@ type repositoryPackageManifest struct { ManifestVersion string MinVersion string Name string + Emoji string Description string Files []string } @@ -186,6 +189,10 @@ func parseRepositoryPackageManifest(manifestPath string, content []byte) (*repos } } + if emoji, ok := stringValue(root["emoji"]); ok { + manifest.Emoji = emoji + } + if filesValue, ok := root["files"]; ok { files, fileWarnings := extractManifestFiles(filesValue, manifestPath) manifest.Files = files diff --git a/pkg/cli/add_package_manifest_test.go b/pkg/cli/add_package_manifest_test.go index 38aea9f022b..d2611ea814a 100644 --- a/pkg/cli/add_package_manifest_test.go +++ b/pkg/cli/add_package_manifest_test.go @@ -36,6 +36,7 @@ func TestResolveRepositoryPackage(t *testing.T) { switch path { case "aw.yml": return []byte(`name: Repo Assist +emoji: 🤖 description: Friendly repository automation files: - workflows/review.md @@ -57,6 +58,7 @@ files: require.NoError(t, err) assert.Equal(t, "aw.yml", pkg.ManifestPath) assert.Equal(t, "Repo Assist", pkg.Name) + assert.Equal(t, "🤖", pkg.Emoji) assert.Equal(t, "README.md", pkg.DocsPath) assert.Equal(t, []string{"workflows/review.md", ".github/workflows/nightly-review.md"}, pkg.InstallationSource) require.NotEmpty(t, pkg.Warnings) @@ -253,6 +255,22 @@ docs: docs/overview.md assert.Contains(t, err.Error(), `docs`) }) + t.Run("rejects non-string emoji field", func(t *testing.T) { + downloadPackageFileFromGitHubForHost = func(owner, repo, path, ref, host string) ([]byte, error) { + if path == "aw.yml" { + return []byte(`name: Repo Assist +emoji: + icon: 🤖 +`), nil + } + return nil, createRepositoryPackageNotFoundError(path) + } + + _, err := resolveRepositoryPackage(&RepoSpec{RepoSlug: "owner/repo"}, "") + require.Error(t, err) + assert.Contains(t, err.Error(), `emoji`) + }) + t.Run("rejects incompatible min-version", func(t *testing.T) { downloadPackageFileFromGitHubForHost = func(owner, repo, path, ref, host string) ([]byte, error) { if path == "aw.yml" { diff --git a/pkg/parser/schemas/aw_manifest_schema.json b/pkg/parser/schemas/aw_manifest_schema.json index d3f3b28a0a0..b18ac22cc5d 100644 --- a/pkg/parser/schemas/aw_manifest_schema.json +++ b/pkg/parser/schemas/aw_manifest_schema.json @@ -17,6 +17,9 @@ "type": "string", "minLength": 1 }, + "emoji": { + "type": "string" + }, "description": { "type": "string" }, From b1f4104f71ae8140e6accecbfbb0c033bd200a81 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 16 May 2026 15:30:02 +0000 Subject: [PATCH 3/4] Drop unrelated workflow lockfile diff Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/blog-auditor.lock.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 2d92fbea9ba..503f9d2028e 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -1501,7 +1501,6 @@ jobs: GH_AW_SETUP_WORKFLOW_NAME: "Blog Auditor" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/blog-auditor.lock.yml@${{ github.ref }} GH_AW_INFO_VERSION: "2.1.142" - GH_AW_INFO_ENGINE_ID: "claude" - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: From d3815b7fbe2fa8d84baeaf2ca73b2747e8e90d61 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 16 May 2026 15:54:02 +0000 Subject: [PATCH 4/4] Sync legacy manifest reference with emoji field Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- docs/src/content/docs/reference/repository-package-manifest.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/content/docs/reference/repository-package-manifest.md b/docs/src/content/docs/reference/repository-package-manifest.md index b058e78e942..80d15fe61a8 100644 --- a/docs/src/content/docs/reference/repository-package-manifest.md +++ b/docs/src/content/docs/reference/repository-package-manifest.md @@ -18,6 +18,7 @@ For the normative file-format definition, see the [aw.yml repository package man ```yaml min-version: v0.38.0 name: Repo Assist +emoji: 🤖 description: Friendly repository automation for review and issue triage files: - workflows/review.md @@ -31,6 +32,7 @@ files: | `manifest-version` | string | No | Current supported value: `"1"`. Defaults to `"1"` when omitted. | | `min-version` | string | No | Minimum compatible `gh aw` version. Must use the exact `vMAJOR.minor.patch` form, such as `v0.38.0`. | | `name` | string | Yes | Human-readable package name. Must be non-empty after trimming whitespace. | +| `emoji` | string | No | Optional package emoji for display in package metadata. | | `description` | string | No | Optional package description. `gh aw add` warns when it exceeds 255 characters. | | `files` | array of strings | No | Package-root-relative markdown files under `workflows/` or `.github/workflows/`. |