Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add github action for automatically generating and tracking set implementation tracking issues #12941

Open
wants to merge 143 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
e95bb1b
Create publish-wiki.yml
ExpensiveKoala Jun 24, 2023
7f396ad
Create Home.md
ExpensiveKoala Jun 24, 2023
1a8605d
Update publish-wiki.yml
ExpensiveKoala Jun 24, 2023
d5aef2b
Update publish-wiki.yml
ExpensiveKoala Jun 24, 2023
5942c2d
Update publish-wiki.yml
ExpensiveKoala Jun 24, 2023
a314de2
Create update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
bdb97c8
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
86335d8
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
833664d
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
c2bade1
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
0880f16
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
b7e75b1
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
f2359b3
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
d555f46
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
5c7733a
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
b77f93b
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
c6ad031
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
d619cf4
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
c8df72e
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
38da0ce
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
fa92c5f
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
f601c89
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
e736c0f
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
a719fe6
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
6e7b742
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
88e687c
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
7c2325f
Create set-tracking-issue.md
ExpensiveKoala Jun 24, 2023
a11f004
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
f213735
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
ae416c8
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
23af8d4
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
be0c765
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
ca4ba90
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
b5c8b35
Update set-tracking-issue.md
ExpensiveKoala Jun 24, 2023
625a678
Update set-tracking-issue.md
ExpensiveKoala Jun 24, 2023
0d7cb43
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
ed00793
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
43914d5
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
834090a
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
709ae17
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
8165bbc
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
12adf4d
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
0724625
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
7c6bbe3
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
9687cc8
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
0f6e185
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
ffc2556
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
9932ba1
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
19b06cf
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
52483f7
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
1eccc25
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
a1e9001
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
8be2c1b
Create set-tracking-wiki.md
ExpensiveKoala Jun 24, 2023
20f25f1
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
503d0e5
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
ac74eb4
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
4b2f16c
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
2ab2f38
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
a47679a
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
18acccc
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
2001002
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
246f5b7
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
6d9845d
Update Set-implementation-list.md
invalid-email-address Jun 24, 2023
1621eac
Revert "Update Set-implementation-list.md"
ExpensiveKoala Jun 24, 2023
25315e4
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
6dbe4fc
Update update-set-implementation-lists.yml
ExpensiveKoala Jun 24, 2023
78eb918
Update Set-implementation-list.md
invalid-email-address Jun 24, 2023
200e923
Don't error if there are no changes to set tracking
ExpensiveKoala Sep 29, 2024
487c9f3
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
0c07b70
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
c76912c
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
e8db812
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
d1e0c85
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
1fbd2c4
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
7736522
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
bfc064a
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
a1e6024
Remove wiki stuff
ExpensiveKoala Sep 29, 2024
35494e9
Merge branch 'master' of https://github.com/ExpensiveKoala/mage
ExpensiveKoala Sep 29, 2024
36a7d16
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
8109ff1
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
4918e9c
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
fc9c707
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
1115746
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
78ecf71
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
2407046
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
36337fd
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
8b1a051
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
3c70398
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
9599f77
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
299fad1
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
c39bd1e
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
fadb5f8
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
5998afb
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
9c74f1e
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
570c981
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
1bf105b
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
73911bf
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
50274fa
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
18101a3
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
0e5b886
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
1c5e571
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
9759a4d
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
0477fab
Rename set-tracking-wiki template to list
ExpensiveKoala Sep 29, 2024
a4f410e
Merge remote-tracking branch 'upstream/master'
ExpensiveKoala Sep 29, 2024
edcf473
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
d3e2c13
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
955f913
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
d8582a5
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
26149ce
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
5a98225
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
2021110
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
f53a063
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
3b59a0d
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
eb60935
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
754f262
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
aa306c7
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
640d7c3
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
e212dde
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
0d0d4ec
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
d69b32d
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
8792dc1
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
1ced236
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
267fe6c
Update set-tracking-issue.md
ExpensiveKoala Sep 29, 2024
cfc07e9
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
69e910d
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
1450ea1
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
4951785
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
9d2087c
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
284b5b6
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
12382b0
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
73ff845
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
9e6c878
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
1b7a18c
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
e88c011
Update readme.md
ExpensiveKoala Sep 29, 2024
9e04853
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
b20484a
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
2359db1
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
937651d
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
6e75d96
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
8898c96
Update Set-implementation-list.md
invalid-email-address Sep 29, 2024
a5270ab
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
dc38f67
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
2bc7a98
Update update-set-implementation-lists.yml
ExpensiveKoala Sep 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .github/templates/set-tracking-issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
This checklist is here to help manage the implementation of {{setName}}. If a card is marked as being in progress then someone is working on it.

If you're new to implementing cards then you likely don't have permission to check things off. This is totally fine! We still appreciate your contributions so just leave a comment to let us know that you're working on it.

Don't worry about moving things from in progress to completed either, this issue is automatically updated by github actions, and don't worry about fixing text issues as those are usually handled when the set is done.

[All Sets](https://github.com/magefree/mage/wiki/Set-implementation-list)


{{#hasUnimplementedCards}}
# Unimplemented Cards

{{#unimplementedCards}}
- [{{#pr}}x{{/pr}}{{^pr}} {{/pr}}] In progress -- [{{name}}]({{scryfall}})
{{/unimplementedCards}}

[Scryfall gallery of everything currently unimplemented]({{unimplementedScryfallLink}})
{{/hasUnimplementedCards}}

{{^hasUnimplementedCards}}
All cards are implemented
{{/hasUnimplementedCards}}

# Implemented Cards
<details>
<summary>Click to expand</summary>
</br>

{{#hasImplementedCards}}
{{#implementedCards}}
- [{{#pr}}x{{/pr}}{{^pr}} {{/pr}}] Done -- [{{name}}]({{scryfall}})
{{/implementedCards}}
{{/hasImplementedCards}}

</details>

5 changes: 5 additions & 0 deletions .github/templates/set-tracking-list.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Set Name | # Cards | # Missing |
--- | --- | --- |
{{#sets}}
[{{name}}]({{issueLink}}) | {{total}} | {{missing}}
{{/sets}}
289 changes: 289 additions & 0 deletions .github/workflows/update-set-implementation-lists.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
name: Update set implementation lists
on:
push:
branches: [master]
#workflow_dispatch:
concurrency:
group: set-impl
cancel-in-progress: true
jobs:
update-set-implementation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install mustache
shell: bash

- uses: actions/[email protected]
id: updateissues
with:
script: |
const mustache = require('mustache')
const path = require('path')
const fs = require('fs')

// Disable mustache html-escape
mustache.escape = function(str) {
return str;
};

// https://stackoverflow.com/a/2970667
function toCamelCase(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index === 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, '')
}

function splitter(input, maxChars) {
var output = [];
output.push( input.split("\n").reduce(function(a, b) {
if (a.length + b.length < maxChars) {
a += "\n" + b; //if comnined length is still not execeeding add it a
} else {
output.push(a); //if combined less is exceeding the maxchars then push the last sentence to output
a = b;
}
return a;
})); //push the residue to output
return output;
}

const setsData = fs.readFileSync(path.join('Utils', 'mtg-sets-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'));
const cardsData = fs.readFileSync(path.join('Utils', 'mtg-cards-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'))
.filter(card => !(card[0].toLowerCase() === "plains" || card[0].toLowerCase() === "swamp" || card[0].toLowerCase() === "island" || card[0].toLowerCase() === "mountain" || card[0].toLowerCase() === "forest"));
const cardIssueTemplate = fs.readFileSync(path.join('.github', 'templates', 'set-tracking-issue.md'), 'utf8');

const issues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
labels: 'tracking set',
state: 'all'
});
//console.log("Found list of existing tracking set issues:", issues);

const issuesToUpdate = [];
const issuesToCreate = [];

for (const set of setsData) {
if (!set || !set[0] || !set[1]) continue;
let foundIssue = undefined;
issues.every(issue => {
if(issue && issue.title && issue.title.startsWith(set[1])) {
console.log(`Found tracking issue for ${set[0]} with issue number: ${issue.number}`);
foundIssue = issue;
return false;
}
return true;
});

let issueComments = undefined;
if (foundIssue) {
issueComments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: foundIssue.number
});
console.log(`Found ${issueComments.length} comments on issue #${foundIssue.number}`);
}

const cards = cardsData.filter(card => card[1] === set[0]);
const unimplemented = [];
const implemented = [];

for (const cardData of cards) {
const className = toCamelCase(cardData[0].replace(/[+]/g, ' Plus ').replace(/[_]+/g, ' Blank ').replace(/[']/g, '').replace(/[-+,.!?`@#$%^&*()_=<>:";~\\|/]/g, ' '));
const cleanCardName = cardData[0].replace(/[-,'.!?`@#$%^&*()_=<>:";~\\|/\s]/g, '').toLowerCase();
const cardPath = path.join('Mage.Sets', 'src', 'mage', 'cards', className.substring(0, 1), `${className.charAt(0).toUpperCase()+className.slice(1)}.java`);

// Find if someone left a comment with the card name (if someone did, we will put a check mark on the item)
let claimed = false;
issueComments && issueComments.forEach(comment => {
if (comment.body && comment.body.search(new RegExp(cardData[0], "i")) != -1 || comment.body.search(new RegExp(cleanCardName, "i")) != -1) {
console.log(`Found a comment by ${comment.user.login} claiming card ${cardData[0]}`);
claimed = true;
}
});

if (fs.existsSync(cardPath)) {
implemented.push({
pr: true,
name: cardData[0],
cleanName: cleanCardName,
scryfall: `https://scryfall.com/search?q=!"${cleanCardName}"+e:${set[1]}`
});
} else {
unimplemented.push({
pr: claimed,
name: cardData[0],
cleanName: cleanCardName,
scryfall: `https://scryfall.com/search?q=!"${cleanCardName}"+e:${set[1]}`
});
}
}
implemented.sort((a, b) => a.name.localeCompare(b.name));
unimplemented.sort((a, b) => a.name.localeCompare(b.name));
let body = mustache.render(cardIssueTemplate, {
hasUnimplementedCards: unimplemented.length > 0,
hasImplementedCards: implemented.length > 0,
unimplementedCards: unimplemented,
implementedCards: implemented,
unimplementedScryfallLink: `https://scryfall.com/search?q=!"${unimplemented.map(e => e.cleanName).join('"OR!"')}"+e:${set[1]}`,
setName: set[0]
});

// GH API has a max character length of 65536 for issue body. We can try to cut down on unnecessary fat to try to get it to fit.
if (body.length > 65536) {
console.log(`Issue body for ${set[0]} (${set[1]}) too long! Length: ${body.length}. Attempting to trim down size...`);
const trimmedBody = mustache.render(cardIssueTemplate, {
hasUnimplementedCards: unimplemented.length > 0,
hasImplementedCards: implemented.length > 0,
unimplementedCards: unimplemented,
implementedCards: implemented,
unimplementedScryfallLink: `https://scryfall.com/search?q=!"${unimplemented.map(e => e.cleanName).join('"OR!"')}"+e:${set[1]}`,
setName: set[0]
}).replaceAll("--", "-").replaceAll("https://", "").replaceAll(`+e:${set[1]}`, "");
console.log(`Trimmed body length: ${trimmedBody.length}`);
if (trimmedBody.length > 65536) {
console.log(`Could not create issue for ${set[0]} (${set[1]}). Please track this manually.`);
continue;
} else {
body = trimmedBody;
}
}

if (foundIssue !== undefined) {
foundIssue.body = body;
foundIssue.state = unimplemented.length > 0 ? "open" : "closed";
issuesToUpdate.push(foundIssue);
} else {
issuesToCreate.push({
title: `${set[1]}: ${set[0]} Set Card Implementation Tracking`,
body: body,
state: unimplemented.length > 0 ? "open" : "closed"
});
}
}

console.log(`Updating ${issuesToUpdate.length} issues`);
for (const issue of issuesToUpdate) {
github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: issue.body,
state: issue.state
});
}
console.log(`Creating ${issuesToCreate.length} issues`);
for (const issue of issuesToCreate) {
const result = await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: issue.title,
body: issue.body,
labels: ["tracking set"]
});
if (issue.state === "closed") {
github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: result.data.number,
state: issue.state
});
}
}
- uses: actions/[email protected]
id: updatesetimplementations
with:
script: |
const mustache = require('mustache')
const path = require('path')
const fs = require('fs')

// Disable mustache html-escape
mustache.escape = function(str) {
return str;
};

// https://stackoverflow.com/a/2970667
function toCamelCase(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index === 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, '')
}

const setImplementationTemplate = fs.readFileSync(path.join('.github', 'templates', 'set-tracking-list.md'), 'utf8');

const setsData = fs.readFileSync(path.join('Utils', 'mtg-sets-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'));
const cardsData = fs.readFileSync(path.join('Utils', 'mtg-cards-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'))
.filter(card => !(card[0].toLowerCase() === "plains" || card[0].toLowerCase() === "swamp" || card[0].toLowerCase() === "island" || card[0].toLowerCase() === "mountain" || card[0].toLowerCase() === "forest"))

const issues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
labels: 'tracking set',
state: 'all'
});
console.log("Found list of existing tracking set issues:", issues);

const sets = [];
setsData.forEach(set => {
let foundIssue = undefined;
issues.every(issue => {
if(issue && issue.title && issue.title.startsWith(set[1])) {
console.log(`Found tracking issue for ${set[0]} with issue number: ${issue.number}`);
foundIssue = issue;
return false;
}
return true;
});

const cards = cardsData.filter(card => card[1] === set[0]);
let implementedCount = 0;
cards.forEach(cardData => {
const className = toCamelCase(cardData[0].replace(/[+]/g, ' Plus ').replace(/[_]+/g, ' Blank ').replace(/[']/g, '').replace(/[-+,.!?`@#$%^&*()_=<>:";~\\|/]/g, ' '));
const cleanCardName = cardData[0].replace(/[-,'.!?`@#$%^&*()_=<>:";~\\|/\s]/g, '').toLowerCase();
const cardPath = path.join('Mage.Sets', 'src', 'mage', 'cards', className.substring(0, 1), `${className.charAt(0).toUpperCase()+className.slice(1)}.java`);
if (fs.existsSync(cardPath)) {
implementedCount++;
}
});
sets.push({
name: set[0],
issueLink: foundIssue === undefined ? "https://www.github.com/mage/magefree" : foundIssue.html_url,
total: cards.length,
missing: cards.length - implementedCount
});
});

const content = mustache.render(setImplementationTemplate, {
sets: sets
});

console.log(content);

try {
fs.writeFileSync(path.join('Set-implementation-list.md'), content);
} catch (err) {
console.error(err);
}
- name: commit
run: |
# Setup git config
git config user.name github-actions
git config user.email [email protected]
# Stage the Set-implementation-list.md file, commit, then push
git add Set-implementation-list.md
git commit -m "Update Set-implementation-list.md" || exit 0
git push
Loading