mirror of
https://github.com/github/awesome-copilot.git
synced 2026-03-13 12:45:13 +00:00
Extract workflow triggers from 'on' frontmatter field, drop tags
Update parseWorkflowMetadata to extract triggers from the 'on' property keys (e.g. schedule, issue_comment) instead of a separate 'triggers' field. Remove tags support from workflows since workflows don't use tags. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -204,7 +204,6 @@ function generateWorkflowsData(gitDates) {
|
|||||||
items: workflows,
|
items: workflows,
|
||||||
filters: {
|
filters: {
|
||||||
triggers: [],
|
triggers: [],
|
||||||
tags: [],
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -214,7 +213,6 @@ function generateWorkflowsData(gitDates) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const allTriggers = new Set();
|
const allTriggers = new Set();
|
||||||
const allTags = new Set();
|
|
||||||
|
|
||||||
for (const file of workflowFiles) {
|
for (const file of workflowFiles) {
|
||||||
const filePath = path.join(WORKFLOWS_DIR, file);
|
const filePath = path.join(WORKFLOWS_DIR, file);
|
||||||
@@ -226,7 +224,6 @@ function generateWorkflowsData(gitDates) {
|
|||||||
.replace(/\\/g, "/");
|
.replace(/\\/g, "/");
|
||||||
|
|
||||||
(metadata.triggers || []).forEach((t) => allTriggers.add(t));
|
(metadata.triggers || []).forEach((t) => allTriggers.add(t));
|
||||||
(metadata.tags || []).forEach((t) => allTags.add(t));
|
|
||||||
|
|
||||||
const id = path.basename(file, ".md");
|
const id = path.basename(file, ".md");
|
||||||
workflows.push({
|
workflows.push({
|
||||||
@@ -234,7 +231,6 @@ function generateWorkflowsData(gitDates) {
|
|||||||
title: metadata.name,
|
title: metadata.name,
|
||||||
description: metadata.description,
|
description: metadata.description,
|
||||||
triggers: metadata.triggers || [],
|
triggers: metadata.triggers || [],
|
||||||
tags: metadata.tags || [],
|
|
||||||
path: relativePath,
|
path: relativePath,
|
||||||
lastUpdated: gitDates.get(relativePath) || null,
|
lastUpdated: gitDates.get(relativePath) || null,
|
||||||
});
|
});
|
||||||
@@ -248,7 +244,6 @@ function generateWorkflowsData(gitDates) {
|
|||||||
items: sortedWorkflows,
|
items: sortedWorkflows,
|
||||||
filters: {
|
filters: {
|
||||||
triggers: Array.from(allTriggers).sort(),
|
triggers: Array.from(allTriggers).sort(),
|
||||||
tags: Array.from(allTags).sort(),
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -682,9 +677,7 @@ function generateSearchIndex(
|
|||||||
lastUpdated: workflow.lastUpdated,
|
lastUpdated: workflow.lastUpdated,
|
||||||
searchText: `${workflow.title} ${
|
searchText: `${workflow.title} ${
|
||||||
workflow.description
|
workflow.description
|
||||||
} ${workflow.triggers.join(" ")} ${workflow.tags.join(
|
} ${workflow.triggers.join(" ")}`.toLowerCase(),
|
||||||
" "
|
|
||||||
)}`.toLowerCase(),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -843,7 +836,7 @@ async function main() {
|
|||||||
const workflowsData = generateWorkflowsData(gitDates);
|
const workflowsData = generateWorkflowsData(gitDates);
|
||||||
const workflows = workflowsData.items;
|
const workflows = workflowsData.items;
|
||||||
console.log(
|
console.log(
|
||||||
`✓ Generated ${workflows.length} workflows (${workflowsData.filters.triggers.length} triggers, ${workflowsData.filters.tags.length} tags)`
|
`✓ Generated ${workflows.length} workflows (${workflowsData.filters.triggers.length} triggers)`
|
||||||
);
|
);
|
||||||
|
|
||||||
const instructionsData = generateInstructionsData(gitDates);
|
const instructionsData = generateInstructionsData(gitDates);
|
||||||
|
|||||||
@@ -275,14 +275,19 @@ function parseWorkflowMetadata(filePath) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract triggers from frontmatter if present
|
// Extract triggers from the 'on' field (top-level keys)
|
||||||
const triggers = frontmatter.triggers || [];
|
const onField = frontmatter.on;
|
||||||
|
const triggers = [];
|
||||||
|
if (onField && typeof onField === "object") {
|
||||||
|
triggers.push(...Object.keys(onField));
|
||||||
|
} else if (typeof onField === "string") {
|
||||||
|
triggers.push(onField);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: frontmatter.name,
|
name: frontmatter.name,
|
||||||
description: frontmatter.description,
|
description: frontmatter.description,
|
||||||
triggers,
|
triggers,
|
||||||
tags: frontmatter.tags || [],
|
|
||||||
path: filePath,
|
path: filePath,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -24,10 +24,6 @@ import Modal from '../components/Modal.astro';
|
|||||||
<label for="filter-trigger">Trigger:</label>
|
<label for="filter-trigger">Trigger:</label>
|
||||||
<select id="filter-trigger" multiple aria-label="Filter by trigger"></select>
|
<select id="filter-trigger" multiple aria-label="Filter by trigger"></select>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-group">
|
|
||||||
<label for="filter-tag">Tag:</label>
|
|
||||||
<select id="filter-tag" multiple aria-label="Filter by tag"></select>
|
|
||||||
</div>
|
|
||||||
<div class="filter-group">
|
<div class="filter-group">
|
||||||
<label for="sort-select">Sort:</label>
|
<label for="sort-select">Sort:</label>
|
||||||
<select id="sort-select" aria-label="Sort by">
|
<select id="sort-select" aria-label="Sort by">
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ interface Workflow extends SearchItem {
|
|||||||
id: string;
|
id: string;
|
||||||
path: string;
|
path: string;
|
||||||
triggers: string[];
|
triggers: string[];
|
||||||
tags: string[];
|
|
||||||
lastUpdated?: string | null;
|
lastUpdated?: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,7 +25,6 @@ interface WorkflowsData {
|
|||||||
items: Workflow[];
|
items: Workflow[];
|
||||||
filters: {
|
filters: {
|
||||||
triggers: string[];
|
triggers: string[];
|
||||||
tags: string[];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,10 +34,8 @@ const resourceType = "workflow";
|
|||||||
let allItems: Workflow[] = [];
|
let allItems: Workflow[] = [];
|
||||||
let search = new FuzzySearch<Workflow>();
|
let search = new FuzzySearch<Workflow>();
|
||||||
let triggerSelect: Choices;
|
let triggerSelect: Choices;
|
||||||
let tagSelect: Choices;
|
|
||||||
let currentFilters = {
|
let currentFilters = {
|
||||||
triggers: [] as string[],
|
triggers: [] as string[],
|
||||||
tags: [] as string[],
|
|
||||||
};
|
};
|
||||||
let currentSort: SortOption = "title";
|
let currentSort: SortOption = "title";
|
||||||
|
|
||||||
@@ -68,11 +64,6 @@ function applyFiltersAndRender(): void {
|
|||||||
item.triggers.some((t) => currentFilters.triggers.includes(t))
|
item.triggers.some((t) => currentFilters.triggers.includes(t))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (currentFilters.tags.length > 0) {
|
|
||||||
results = results.filter((item) =>
|
|
||||||
item.tags.some((t) => currentFilters.tags.includes(t))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
results = sortItems(results);
|
results = sortItems(results);
|
||||||
|
|
||||||
@@ -84,12 +75,6 @@ function applyFiltersAndRender(): void {
|
|||||||
currentFilters.triggers.length > 1 ? "s" : ""
|
currentFilters.triggers.length > 1 ? "s" : ""
|
||||||
}`
|
}`
|
||||||
);
|
);
|
||||||
if (currentFilters.tags.length > 0)
|
|
||||||
activeFilters.push(
|
|
||||||
`${currentFilters.tags.length} tag${
|
|
||||||
currentFilters.tags.length > 1 ? "s" : ""
|
|
||||||
}`
|
|
||||||
);
|
|
||||||
let countText = `${results.length} of ${allItems.length} workflows`;
|
let countText = `${results.length} of ${allItems.length} workflows`;
|
||||||
if (activeFilters.length > 0) {
|
if (activeFilters.length > 0) {
|
||||||
countText += ` (filtered by ${activeFilters.join(", ")})`;
|
countText += ` (filtered by ${activeFilters.join(", ")})`;
|
||||||
@@ -125,12 +110,6 @@ function renderItems(items: Workflow[], query = ""): void {
|
|||||||
`<span class="resource-tag tag-trigger">${escapeHtml(t)}</span>`
|
`<span class="resource-tag tag-trigger">${escapeHtml(t)}</span>`
|
||||||
)
|
)
|
||||||
.join("")}
|
.join("")}
|
||||||
${item.tags
|
|
||||||
.map(
|
|
||||||
(t) =>
|
|
||||||
`<span class="resource-tag tag-tag">${escapeHtml(t)}</span>`
|
|
||||||
)
|
|
||||||
.join("")}
|
|
||||||
${getLastUpdatedHtml(item.lastUpdated)}
|
${getLastUpdatedHtml(item.lastUpdated)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -191,21 +170,6 @@ export async function initWorkflowsPage(): Promise<void> {
|
|||||||
applyFiltersAndRender();
|
applyFiltersAndRender();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Setup tag filter
|
|
||||||
tagSelect = createChoices("#filter-tag", {
|
|
||||||
placeholderValue: "All Tags",
|
|
||||||
});
|
|
||||||
tagSelect.setChoices(
|
|
||||||
data.filters.tags.map((t) => ({ value: t, label: t })),
|
|
||||||
"value",
|
|
||||||
"label",
|
|
||||||
true
|
|
||||||
);
|
|
||||||
document.getElementById("filter-tag")?.addEventListener("change", () => {
|
|
||||||
currentFilters.tags = getChoicesValues(tagSelect);
|
|
||||||
applyFiltersAndRender();
|
|
||||||
});
|
|
||||||
|
|
||||||
sortSelect?.addEventListener("change", () => {
|
sortSelect?.addEventListener("change", () => {
|
||||||
currentSort = sortSelect.value as SortOption;
|
currentSort = sortSelect.value as SortOption;
|
||||||
applyFiltersAndRender();
|
applyFiltersAndRender();
|
||||||
@@ -218,10 +182,9 @@ export async function initWorkflowsPage(): Promise<void> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
clearFiltersBtn?.addEventListener("click", () => {
|
clearFiltersBtn?.addEventListener("click", () => {
|
||||||
currentFilters = { triggers: [], tags: [] };
|
currentFilters = { triggers: [] };
|
||||||
currentSort = "title";
|
currentSort = "title";
|
||||||
triggerSelect.removeActiveItems();
|
triggerSelect.removeActiveItems();
|
||||||
tagSelect.removeActiveItems();
|
|
||||||
if (searchInput) searchInput.value = "";
|
if (searchInput) searchInput.value = "";
|
||||||
if (sortSelect) sortSelect.value = "title";
|
if (sortSelect) sortSelect.value = "title";
|
||||||
applyFiltersAndRender();
|
applyFiltersAndRender();
|
||||||
|
|||||||
Reference in New Issue
Block a user