diff --git a/.all-contributorsrc b/.all-contributorsrc
new file mode 100644
index 0000000..ae9f72a
--- /dev/null
+++ b/.all-contributorsrc
@@ -0,0 +1,793 @@
+{
+ "projectName": "awesome-copilot",
+ "projectOwner": "github",
+ "repoType": "github",
+ "repoHost": "https://github.com",
+ "files": [
+ "README.md"
+ ],
+ "imageSize": 100,
+ "commit": false,
+ "commitConvention": "none",
+ "contributors": [
+ {
+ "login": "aaronpowell",
+ "name": "Aaron Powell",
+ "avatar_url": "https://avatars.githubusercontent.com/u/434140?v=4",
+ "profile": "https://www.aaron-powell.com/",
+ "contributions": [
+ "code",
+ "maintenance",
+ "projectManagement",
+ "promotion"
+ ]
+ },
+ {
+ "login": "mubaidr",
+ "name": "Muhammad Ubaid Raza",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2222702?v=4",
+ "profile": "https://mubaidr.js.org/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "digitarald",
+ "name": "Harald Kirschner",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8599?v=4",
+ "profile": "http://digitarald.de/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "mbianchidev",
+ "name": "Matteo Bianchi",
+ "avatar_url": "https://avatars.githubusercontent.com/u/37507190?v=4",
+ "profile": "https://github.com/mbianchidev",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "AungMyoKyaw",
+ "name": "Aung Myo Kyaw",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9404824?v=4",
+ "profile": "https://github.com/AungMyoKyaw",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "PlagueHO",
+ "name": "Daniel Scott-Raynsford",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7589164?v=4",
+ "profile": "https://danielscottraynsford.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "burkeholland",
+ "name": "Burke Holland",
+ "avatar_url": "https://avatars.githubusercontent.com/u/686963?v=4",
+ "profile": "https://github.com/burkeholland",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "PEZ",
+ "name": "Peter Strömberg",
+ "avatar_url": "https://avatars.githubusercontent.com/u/30010?v=4",
+ "profile": "https://calva.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "danielmeppiel",
+ "name": "Daniel Meppiel",
+ "avatar_url": "https://avatars.githubusercontent.com/u/51440732?v=4",
+ "profile": "https://www.devprodlogs.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "jamesmontemagno",
+ "name": "James Montemagno",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1676321?v=4",
+ "profile": "https://montemagno.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "VamshiVerma",
+ "name": "Vamshi Verma",
+ "avatar_url": "https://avatars.githubusercontent.com/u/21999324?v=4",
+ "profile": "https://github.com/VamshiVerma",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "sinedied",
+ "name": "Yohan Lasorsa",
+ "avatar_url": "https://avatars.githubusercontent.com/u/593151?v=4",
+ "profile": "https://github.com/sinedied",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "OrenMe",
+ "name": "Oren Me",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5461862?v=4",
+ "profile": "https://github.com/OrenMe",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "mjrousos",
+ "name": "Mike Rousos",
+ "avatar_url": "https://avatars.githubusercontent.com/u/10077254?v=4",
+ "profile": "https://github.com/mjrousos",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "guiopen",
+ "name": "Guilherme do Amaral Alves ",
+ "avatar_url": "https://avatars.githubusercontent.com/u/94094527?v=4",
+ "profile": "https://github.com/guiopen",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "troystaylor",
+ "name": "Troy Simeon Taylor",
+ "avatar_url": "https://avatars.githubusercontent.com/u/44444967?v=4",
+ "profile": "https://www.buymeacoffee.com/troystaylor",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ambilykk",
+ "name": "Ambily",
+ "avatar_url": "https://avatars.githubusercontent.com/u/10282550?v=4",
+ "profile": "https://www.linkedin.com/in/ambilykk/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "tgrall",
+ "name": "Tugdual Grall",
+ "avatar_url": "https://avatars.githubusercontent.com/u/541250?v=4",
+ "profile": "http://tgrall.github.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "TianqiZhang",
+ "name": "Tianqi Zhang",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5326582?v=4",
+ "profile": "https://github.com/TianqiZhang",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "shubham070",
+ "name": "Shubham Gaikwad",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5480589?v=4",
+ "profile": "https://github.com/shubham070",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "sdolgin",
+ "name": "Saul Dolgin",
+ "avatar_url": "https://avatars.githubusercontent.com/u/576449?v=4",
+ "profile": "https://github.com/sdolgin",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "nullchimp",
+ "name": "NULLchimp",
+ "avatar_url": "https://avatars.githubusercontent.com/u/58362593?v=4",
+ "profile": "https://github.com/nullchimp",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "MattVevang",
+ "name": "Matt Vevang",
+ "avatar_url": "https://avatars.githubusercontent.com/u/20714898?v=4",
+ "profile": "https://github.com/MattVevang",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "justinyoo",
+ "name": "Justin Yoo",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1538528?v=4",
+ "profile": "https://devkimchi.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "0GiS0",
+ "name": "Gisela Torres",
+ "avatar_url": "https://avatars.githubusercontent.com/u/175379?v=4",
+ "profile": "https://hachyderm.io/@0gis0",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "debs-obrien",
+ "name": "Debbie O'Brien",
+ "avatar_url": "https://avatars.githubusercontent.com/u/13063165?v=4",
+ "profile": "https://debbie.codes/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "agreaves-ms",
+ "name": "Allen Greaves",
+ "avatar_url": "https://avatars.githubusercontent.com/u/111466195?v=4",
+ "profile": "https://github.com/agreaves-ms",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "AmeliaRose802",
+ "name": "Amelia Payne",
+ "avatar_url": "https://avatars.githubusercontent.com/u/26167931?v=4",
+ "profile": "https://github.com/AmeliaRose802",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "SebastienDegodez",
+ "name": "Sebastien DEGODEZ",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2349146?v=4",
+ "profile": "https://github.com/SebastienDegodez",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "segraef",
+ "name": "Sebastian Gräf",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19261257?v=4",
+ "profile": "https://graef.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "9ssi7",
+ "name": "Salih İbrahimbaş",
+ "avatar_url": "https://avatars.githubusercontent.com/u/76786120?v=4",
+ "profile": "https://9ssi7.dev/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "inquinity",
+ "name": "Robert Altman",
+ "avatar_url": "https://avatars.githubusercontent.com/u/406234?v=4",
+ "profile": "https://github.com/inquinity",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "pertrai1",
+ "name": "Rob Simpson",
+ "avatar_url": "https://avatars.githubusercontent.com/u/442374?v=4",
+ "profile": "https://github.com/pertrai1",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ricksmit3000",
+ "name": "Rick Smit",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7207783?v=4",
+ "profile": "https://ricksm.it/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "psmulovics",
+ "name": "Peter Smulovics",
+ "avatar_url": "https://avatars.githubusercontent.com/u/28162552?v=4",
+ "profile": "http://dotneteers.net/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "pelikhan",
+ "name": "Peli de Halleux",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4175913?v=4",
+ "profile": "https://github.com/pelikhan",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "paulomorgado",
+ "name": "Paulo Morgado",
+ "avatar_url": "https://avatars.githubusercontent.com/u/470455?v=4",
+ "profile": "https://www.paulomorgado.net/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "nickytonline",
+ "name": "Nick Taylor",
+ "avatar_url": "https://avatars.githubusercontent.com/u/833231?v=4",
+ "profile": "https://nickyt.co/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "mikeparker104",
+ "name": "Mike Parker",
+ "avatar_url": "https://avatars.githubusercontent.com/u/12763221?v=4",
+ "profile": "https://github.com/mikeparker104",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "mikekistler",
+ "name": "Mike Kistler",
+ "avatar_url": "https://avatars.githubusercontent.com/u/85643503?v=4",
+ "profile": "https://github.com/mikekistler",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "mfairchild365",
+ "name": "Michael Fairchild",
+ "avatar_url": "https://avatars.githubusercontent.com/u/498678?v=4",
+ "profile": "https://a11ysupport.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "michaelvolz",
+ "name": "Michael A. Volz (Flynn)",
+ "avatar_url": "https://avatars.githubusercontent.com/u/129928?v=4",
+ "profile": "https://www.linkedin.com/in/michael-volz/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "4regab",
+ "name": "4regab",
+ "avatar_url": "https://avatars.githubusercontent.com/u/178603515?v=4",
+ "profile": "https://github.com/4regab",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "TheovanKraay",
+ "name": "Theo van Kraay",
+ "avatar_url": "https://avatars.githubusercontent.com/u/24420698?v=4",
+ "profile": "https://github.com/TheovanKraay",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "twitthoeft-gls",
+ "name": "Troy Witthoeft (glsauto)",
+ "avatar_url": "https://avatars.githubusercontent.com/u/132710946?v=4",
+ "profile": "http://glsauto.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "iletai",
+ "name": "Tài Lê",
+ "avatar_url": "https://avatars.githubusercontent.com/u/26614687?v=4",
+ "profile": "https://github.com/iletai",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "udayakumarreddyv",
+ "name": "Udaya Veeramreddygari",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9591887?v=4",
+ "profile": "https://tinyurl.com/3p5j9mwe",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "warengonzaga",
+ "name": "Waren Gonzaga",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15052701?v=4",
+ "profile": "https://bio.warengonzaga.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "doggy8088",
+ "name": "Will 保哥",
+ "avatar_url": "https://avatars.githubusercontent.com/u/88981?v=4",
+ "profile": "https://blog.miniasp.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "yukiomoto",
+ "name": "Yuki Omoto",
+ "avatar_url": "https://avatars.githubusercontent.com/u/38450410?v=4",
+ "profile": "https://github.com/yukiomoto",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "hueanmy",
+ "name": "Meii",
+ "avatar_url": "https://avatars.githubusercontent.com/u/20430626?v=4",
+ "profile": "https://github.com/hueanmy",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "samqbush",
+ "name": "samqbush",
+ "avatar_url": "https://avatars.githubusercontent.com/u/74389839?v=4",
+ "profile": "https://github.com/samqbush",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "sdanzo-hrb",
+ "name": "sdanzo-hrb",
+ "avatar_url": "https://avatars.githubusercontent.com/u/136493100?v=4",
+ "profile": "https://github.com/sdanzo-hrb",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "voidfnc",
+ "name": "voidfnc",
+ "avatar_url": "https://avatars.githubusercontent.com/u/194750710?v=4",
+ "profile": "https://github.com/voidfnc",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "webreidi",
+ "name": "Wendy Breiding",
+ "avatar_url": "https://avatars.githubusercontent.com/u/55603905?v=4",
+ "profile": "https://github.com/webreidi",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "zooav",
+ "name": "Ankur Sharma",
+ "avatar_url": "https://avatars.githubusercontent.com/u/12625412?v=4",
+ "profile": "https://github.com/zooav",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Jian-Min-Huang",
+ "name": "黃健旻 Vincent Huang",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6296280?v=4",
+ "profile": "https://jianminhuang.cc/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "dgh06175",
+ "name": "이상현",
+ "avatar_url": "https://avatars.githubusercontent.com/u/77305722?v=4",
+ "profile": "https://github.com/dgh06175",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "abdidaudpropel",
+ "name": "Abdi Daud",
+ "avatar_url": "https://avatars.githubusercontent.com/u/51310019?v=4",
+ "profile": "https://github.com/abdidaudpropel",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "AClerbois",
+ "name": "Adrien Clerbois",
+ "avatar_url": "https://avatars.githubusercontent.com/u/50712277?v=4",
+ "profile": "http://www.senseof.tech/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "tegola",
+ "name": "Alan Sprecacenere",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1868590?v=4",
+ "profile": "http://www.qreate.it/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "askpt",
+ "name": "André Silva",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2493377?v=4",
+ "profile": "https://asilva.dev/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "arey",
+ "name": "Antoine Rey",
+ "avatar_url": "https://avatars.githubusercontent.com/u/838318?v=4",
+ "profile": "https://javaetmoi.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "artemsaveliev",
+ "name": "Artem Saveliev",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15679218?v=4",
+ "profile": "https://github.com/artemsaveliev",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "brunoborges",
+ "name": "Bruno Borges",
+ "avatar_url": "https://avatars.githubusercontent.com/u/129743?v=4",
+ "profile": "http://brunoborges.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "tossnet",
+ "name": "Christophe Peugnet",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3845786?v=4",
+ "profile": "https://www.peug.net/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "MovingLive",
+ "name": "Chtive",
+ "avatar_url": "https://avatars.githubusercontent.com/u/14792628?v=4",
+ "profile": "https://www.movinglive.ca/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "craigbekker",
+ "name": "Craig Bekker",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1115912?v=4",
+ "profile": "https://github.com/craigbekker",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "breakid",
+ "name": "Dan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1446918?v=4",
+ "profile": "https://github.com/breakid",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ewega",
+ "name": "Eldrick Wega",
+ "avatar_url": "https://avatars.githubusercontent.com/u/26189114?v=4",
+ "profile": "https://github.com/ewega",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "felixarjuna",
+ "name": "Felix Arjuna",
+ "avatar_url": "https://avatars.githubusercontent.com/u/79026094?v=4",
+ "profile": "https://www.felixarjuna.dev/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "feapaydin",
+ "name": "Furkan Enes",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19946639?v=4",
+ "profile": "https://github.com/feapaydin",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "gewarren",
+ "name": "Genevieve Warren",
+ "avatar_url": "https://avatars.githubusercontent.com/u/24882762?v=4",
+ "profile": "http://learn.microsoft.com/dotnet",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "geoder101",
+ "name": "George Dernikos",
+ "avatar_url": "https://avatars.githubusercontent.com/u/145904?v=4",
+ "profile": "https://github.com/geoder101",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "giomartinsdev",
+ "name": "Giovanni de Almeida Martins",
+ "avatar_url": "https://avatars.githubusercontent.com/u/125399281?v=4",
+ "profile": "https://github.com/giomartinsdev",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Ioana37",
+ "name": "Ioana A",
+ "avatar_url": "https://avatars.githubusercontent.com/u/69301842?v=4",
+ "profile": "https://github.com/Ioana37",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "nohwnd",
+ "name": "Jakub Jareš",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5735905?v=4",
+ "profile": "https://github.com/nohwnd",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "joe-watkins",
+ "name": "Joe Watkins",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3695795?v=4",
+ "profile": "http://joe-watkins.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "johnpapa",
+ "name": "John Papa",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1202528?v=4",
+ "profile": "http://johnpapa.net/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "josephgonzales01",
+ "name": "Joseph Gonzales",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15100839?v=4",
+ "profile": "http://www.sugbo4j.co.nz/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "josegarridodigio",
+ "name": "José Antonio Garrido",
+ "avatar_url": "https://avatars.githubusercontent.com/u/173672918?v=4",
+ "profile": "https://digio.es/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Ranrar",
+ "name": "Kim Skov Rasmussen",
+ "avatar_url": "https://avatars.githubusercontent.com/u/95967772?v=4",
+ "profile": "https://github.com/Ranrar",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "whiteken",
+ "name": "Kenny White",
+ "avatar_url": "https://avatars.githubusercontent.com/u/20211937?v=4",
+ "profile": "https://github.com/whiteken",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "LouellaCreemers",
+ "name": "Louella Creemers",
+ "avatar_url": "https://avatars.githubusercontent.com/u/46204894?v=4",
+ "profile": "https://github.com/LouellaCreemers",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "lukemurraynz",
+ "name": "Luke Murray",
+ "avatar_url": "https://avatars.githubusercontent.com/u/24467442?v=4",
+ "profile": "https://linktr.ee/lukemurray",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "marknoble",
+ "name": "Mark Noble",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3819700?v=4",
+ "profile": "http://marknoble.com/",
+ "contributions": [
+ "code"
+ ]
+ }
+ ],
+ "contributorsPerLine": 7,
+ "linkToUsage": true
+}
diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml
new file mode 100644
index 0000000..bb0241c
--- /dev/null
+++ b/.github/workflows/contributors.yml
@@ -0,0 +1,67 @@
+name: Contributors
+
+on:
+ schedule:
+ - cron: '0 3 * * 0' # Weekly on Sundays at 3am UTC
+ workflow_dispatch: # Manual trigger
+
+jobs:
+ contributors:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "20"
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Update contributors
+ uses: all-contributors/all-contributors-cli@v6.26.1
+ with:
+ args: 'check'
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Regenerate README
+ run: node update-readme.js
+
+ - name: Check for changes
+ id: verify-changed-files
+ run: |
+ if git diff --exit-code > /dev/null; then
+ echo "changed=false" >> $GITHUB_OUTPUT
+ else
+ echo "changed=true" >> $GITHUB_OUTPUT
+ fi
+
+ - name: Commit contributors
+ if: steps.verify-changed-files.outputs.changed == 'true'
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ git add .
+ git commit -m "docs: update contributors" -a || exit 0
+
+ - name: Create Pull Request
+ if: steps.verify-changed-files.outputs.changed == 'true'
+ uses: peter-evans/create-pull-request@v5
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ commit-message: "docs: update contributors"
+ title: "Update Contributors"
+ body: |
+ Auto-generated PR to update contributors.
+
+ This PR was automatically created by the contributors workflow.
+ branch: update-contributors
+ delete-branch: true
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index eed9c78..87a07e4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -113,6 +113,8 @@ You are an expert [domain/role] with deep knowledge in [specific areas].
- A brief description of what your instruction/prompt does
- Any relevant context or usage notes
+**Note**: Once your contribution is merged, you'll automatically be added to our [Contributors](#contributors-) section! We use [all-contributors](https://github.com/all-contributors/all-contributors) to recognize all types of contributions to the project.
+
## What We Accept
We welcome contributions covering any technology, framework, or development practice that helps developers work more effectively with GitHub Copilot. This includes:
@@ -145,6 +147,21 @@ To maintain a safe, responsible, and constructive community, we will **not accep
- **Write clearly**: Use simple, direct language
- **Promote best practices**: Encourage secure, maintainable, and ethical development practices
+## Contributors Recognition
+
+This project uses [all-contributors](https://github.com/all-contributors/all-contributors) to recognize contributors. When you make a contribution, you'll automatically be recognized in our contributors list!
+
+We welcome contributions of all types, including:
+- 📝 Documentation improvements
+- 💻 Code contributions
+- 🐛 Bug reports and fixes
+- 🎨 Design improvements
+- 💡 Ideas and suggestions
+- 🤔 Answering questions
+- 📢 Promoting the project
+
+Your contributions help make this resource better for the entire GitHub Copilot community!
+
## Code of Conduct
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
diff --git a/README.chatmodes.md b/README.chatmodes.md
index 8730bd2..3ec8c74 100644
--- a/README.chatmodes.md
+++ b/README.chatmodes.md
@@ -1,7 +1,16 @@
# 💭 Custom Chat Modes
Custom chat modes define specific behaviors and tools for GitHub Copilot Chat, enabling enhanced context-aware assistance for particular tasks or workflows.
-> 💡 **Usage**: Create new chat modes using the command `Chat: Configure Chat Modes...`, then switch your chat mode in the Chat input from _Agent_ or _Ask_ to your own mode.
+### How to Use Custom Chat Modes
+
+**To Install:**
+- Click the **VS Code** or **VS Code Insiders** install button for the chat mode you want to use
+- Download the `*.chatmode.md` file and manually install it in VS Code using the Command Palette
+
+**To Activate/Use:**
+- Import the chat mode configuration into your VS Code settings
+- Access the installed chat modes through the VS Code Chat interface
+- Select the desired chat mode from the available options in VS Code Chat
| Title | Description |
| ----- | ----------- |
diff --git a/README.instructions.md b/README.instructions.md
index d680a77..1b0d45b 100644
--- a/README.instructions.md
+++ b/README.instructions.md
@@ -1,7 +1,16 @@
# 📋 Custom Instructions
-Team and project-specific instructions to enhance GitHub Copilot's behavior for specific technologies and coding practices:
-> 💡 **Usage**: Copy these instructions to your `.github/copilot-instructions.md` file or create task-specific `.github/.instructions.md` files in your workspace's `.github/instructions` folder.
+Team and project-specific instructions to enhance GitHub Copilot's behavior for specific technologies and coding practices.
+### How to Use Custom Instructions
+
+**To Install:**
+- Click the **VS Code** or **VS Code Insiders** install button for the instruction you want to use
+- Download the `*.instructions.md` file and manually add it to your project's instruction collection
+
+**To Use/Apply:**
+- Copy these instructions to your `.github/copilot-instructions.md` file in your workspace
+- Create task-specific `.github/.instructions.md` files in your workspace's `.github/instructions` folder
+- Instructions automatically apply to Copilot behavior once installed in your workspace
| Title | Description |
| ----- | ----------- |
@@ -9,6 +18,7 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for
| [AI Prompt Engineering & Safety Best Practices](instructions/ai-prompt-engineering-safety-best-practices.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md) | Comprehensive best practices for AI prompt engineering, safety frameworks, bias mitigation, and responsible AI usage for Copilot and LLMs. |
| [Angular Development Instructions](instructions/angular.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md) | Angular-specific coding standards and best practices |
| [ASP.NET REST API Development](instructions/aspnet-rest-apis.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Faspnet-rest-apis.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Faspnet-rest-apis.instructions.md) | Guidelines for building REST APIs with ASP.NET |
+| [Azure DevOps Pipeline YAML Best Practices](instructions/azure-devops-pipelines.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-devops-pipelines.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-devops-pipelines.instructions.md) | Best practices for Azure DevOps Pipeline YAML files |
| [Azure Functions Typescript](instructions/azure-functions-typescript.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-functions-typescript.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-functions-typescript.instructions.md) | TypeScript patterns for Azure Functions |
| [Azure Verified Modules (AVM) Terraform](instructions/azure-verified-modules-terraform.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-verified-modules-terraform.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-verified-modules-terraform.instructions.md) | Azure Verified Modules (AVM) and Terraform |
| [Bicep Code Best Practices](instructions/bicep-code-best-practices.instructions.md)
[](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fbicep-code-best-practices.instructions.md)
[](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fbicep-code-best-practices.instructions.md) | Infrastructure as Code with Bicep |
diff --git a/README.md b/README.md
index c73d716..0f2516f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
# 🤖 Awesome GitHub Copilot Customizations
[](https://aka.ms/awesome-github-copilot)
+
+[](#contributors-)
+
A curated collection of prompts, instructions, and chat modes to supercharge your GitHub Copilot experience across different domains, languages, and use cases.
@@ -75,6 +78,146 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
**Ready to supercharge your coding experience?** Start exploring our [prompts](README.prompts.md), [instructions](README.instructions.md), and [chat modes](README.chatmodes.md)!
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+
` for code blocks.
-- Use `` for language specific keywords like `null`, `true`, `false`, `int`, `bool`, etc.
+- Use `` for code blocks. `` tags should be placed within an `` tag. Add the language of the code example using the `language` attribute, for example, ``.
diff --git a/prompts/first-ask.prompt.md b/prompts/first-ask.prompt.md
new file mode 100644
index 0000000..fb80699
--- /dev/null
+++ b/prompts/first-ask.prompt.md
@@ -0,0 +1,29 @@
+---
+description: 'Interactive, input-tool powered, task refinement workflow: interrogates scope, deliverables, constraints before carrying out the task; Requires the Joyride extension.'
+---
+
+# Act Informed: First understand together with the human, then do
+
+You are a curious and thorough AI assistant designed to help carry out tasks with high-quality, by being properly informed. You are powered by the `joyride_request_human_input` tool and you use it as a key part of your process in gathering information about the task.
+
+
+Your goal is to iteratively refine your understanding of the task by:
+
+- Understanding the task scope and objectives
+- At all times when you need clarification on details, ask specific questions to the user using the `joyride_request_human_input` tool.
+- Defining expected deliverables and success criteria
+- Perform project explorations, using available tools, to further your understanding of the task
+ - If something needs web research, do that
+- Clarifying technical and procedural requirements
+- Organizing the task into clear sections or steps
+- Ensuring your understanding of the task is as simple as it can be
+
+
+After refining and before carrying out the task:
+- Use the `joyride_request_human_input` tool to ask if the human developer has any further input.
+- Keep refining until the human has no further input.
+
+After gathering sufficient information, and having a clear understanding of the task:
+1. Show your plan to the user with redundancy kept to a minimum
+2. Create a todo list
+3. Get to work!
diff --git a/update-readme.js b/update-readme.js
index 91180ff..8ff453f 100755
--- a/update-readme.js
+++ b/update-readme.js
@@ -5,83 +5,50 @@ const path = require("path");
// Template sections for the README
const TEMPLATES = {
- header: `# 🤖 Awesome GitHub Copilot Customizations
-
-[](https://aka.ms/awesome-github-copilot)
-
-Enhance your GitHub Copilot experience with community-contributed [instructions](#-custom-instructions), [prompts](#-reusable-prompts), and [chat modes](#-custom-chat-modes). Get consistent AI assistance that follows your team's coding standards and project requirements.
-
-
-🎯 GitHub Copilot Customization Features
-
-GitHub Copilot provides three main ways to customize AI responses and tailor assistance to your specific workflows, team guidelines, and project requirements:
-
-| **🧩 [Custom Chat Modes](#-custom-chat-modes)** | **🎯 [Reusable Prompts](#-reusable-prompts)** | **📋 [Custom Instructions](#-custom-instructions)** |
-| --- | --- | --- |
-| Define chat behavior, available tools, and codebase interaction patterns within specific boundaries for each request
**Benefits:**
• Context-aware assistance
• Tool configuration
• Role-specific workflows | Create reusable, standalone prompts for specific tasks. Describe *what* should be done with optional task-specific guidelines
**Benefits:**
• Eliminate repetitive prompt writing
• Shareable across teams
• Support for variables and dependencies | Define common guidelines for tasks like code generation, reviews, and commit messages. Describe *how* tasks should be performed
**Benefits:**
• Automatic inclusion in every chat request
• Repository-wide consistency
• Multiple implementation options |
-
-> **💡 Pro Tip:** Custom instructions only affect Copilot Chat (not inline code completions). You can combine all three customization types - use custom instructions for general guidelines, prompt files for specific tasks, and chat modes to control the interaction context.
-
-
-
-
-📝 Contributing
-
-We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details on how to submit new instructions and prompts.
-
-`,
-
instructionsSection: `## 📋 Custom Instructions
-Team and project-specific instructions to enhance GitHub Copilot's behavior for specific technologies and coding practices:`,
+Team and project-specific instructions to enhance GitHub Copilot's behavior for specific technologies and coding practices.`,
- instructionsUsage: `> 💡 **Usage**: Copy these instructions to your \`.github/copilot-instructions.md\` file or create task-specific \`.github/.instructions.md\` files in your workspace's \`.github/instructions\` folder.`,
+ instructionsUsage: `### How to Use Custom Instructions
+
+**To Install:**
+- Click the **VS Code** or **VS Code Insiders** install button for the instruction you want to use
+- Download the \`*.instructions.md\` file and manually add it to your project's instruction collection
+
+**To Use/Apply:**
+- Copy these instructions to your \`.github/copilot-instructions.md\` file in your workspace
+- Create task-specific \`.github/.instructions.md\` files in your workspace's \`.github/instructions\` folder
+- Instructions automatically apply to Copilot behavior once installed in your workspace`,
promptsSection: `## 🎯 Reusable Prompts
Ready-to-use prompt templates for specific development scenarios and tasks, defining prompt text with a specific mode, model, and available set of tools.`,
- promptsUsage: `> 💡 **Usage**: Use \`/prompt-name\` in VS Code chat, run \`Chat: Run Prompt\` command, or hit the run button while you have a prompt open.`,
+ promptsUsage: `### How to Use Reusable Prompts
+
+**To Install:**
+- Click the **VS Code** or **VS Code Insiders** install button for the prompt you want to use
+- Download the \`*.prompt.md\` file and manually add it to your prompt collection
+
+**To Run/Execute:**
+- Use \`/prompt-name\` in VS Code chat after installation
+- Run the \`Chat: Run Prompt\` command from the Command Palette
+- Hit the run button while you have a prompt file open in VS Code`,
chatmodesSection: `## 💭 Custom Chat Modes
Custom chat modes define specific behaviors and tools for GitHub Copilot Chat, enabling enhanced context-aware assistance for particular tasks or workflows.`,
- chatmodesUsage: `> 💡 **Usage**: Create new chat modes using the command \`Chat: Configure Chat Modes...\`, then switch your chat mode in the Chat input from _Agent_ or _Ask_ to your own mode.`,
+ chatmodesUsage: `### How to Use Custom Chat Modes
- footer: `## 📚 Additional Resources
+**To Install:**
+- Click the **VS Code** or **VS Code Insiders** install button for the chat mode you want to use
+- Download the \`*.chatmode.md\` file and manually install it in VS Code using the Command Palette
-- [VS Code Copilot Customization Documentation](https://code.visualstudio.com/docs/copilot/copilot-customization) - Official Microsoft documentation
-- [GitHub Copilot Chat Documentation](https://code.visualstudio.com/docs/copilot/chat/copilot-chat) - Complete chat feature guide
-- [Custom Chat Modes](https://code.visualstudio.com/docs/copilot/chat/chat-modes) - Advanced chat configuration
-- [VS Code Settings](https://code.visualstudio.com/docs/getstarted/settings) - General VS Code configuration guide
-
-## 🛠️ Development Configuration
-
-This repository uses various configuration files to ensure consistent code style and avoid issues with line endings:
-
-- [\`.editorconfig\`](.editorconfig) - Defines coding styles across different editors and IDEs
-- [\`.gitattributes\`](.gitattributes) - Ensures consistent line endings in text files
-- [\`.vscode/settings.json\`](.vscode/settings.json) - VS Code-specific settings for this repository
-- [\`.vscode/extensions.json\`](.vscode/extensions.json) - Recommended VS Code extensions
-
-> 💡 **Note**: All markdown files in this repository use LF line endings (Unix-style) to avoid mixed line endings issues. The repository is configured to automatically handle line endings conversion.
-
-## 📄 License
-
-This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
-
-## 🤝 Code of Conduct
-
-Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
-
-## ™️ Trademarks
-
-This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
-trademarks or logos is subject to and must follow
-[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
-Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
-Any use of third-party trademarks or logos are subject to those third-party's policies.`,
+**To Activate/Use:**
+- Import the chat mode configuration into your VS Code settings
+- Access the installed chat modes through the VS Code Chat interface
+- Select the desired chat mode from the available options in VS Code Chat`,
};
// Add error handling utility
@@ -433,32 +400,6 @@ function generateChatModesSection(chatmodesDir) {
return `${TEMPLATES.chatmodesSection}\n${TEMPLATES.chatmodesUsage}\n\n${chatmodesContent}`;
}
-/**
- * Generate the complete README.md content from scratch
- */
-function generateReadme() {
- const instructionsDir = path.join(__dirname, "instructions");
- const promptsDir = path.join(__dirname, "prompts");
- const chatmodesDir = path.join(__dirname, "chatmodes");
-
- // Generate each section
- const instructionsSection = generateInstructionsSection(instructionsDir);
- const promptsSection = generatePromptsSection(promptsDir);
- const chatmodesSection = generateChatModesSection(chatmodesDir);
-
- // Build the complete README content with template sections
- const sections = [TEMPLATES.header];
-
- // Only include sections that have content
- if (instructionsSection.trim()) sections.push(instructionsSection);
- if (promptsSection.trim()) sections.push(promptsSection);
- if (chatmodesSection.trim()) sections.push(chatmodesSection);
-
- sections.push(TEMPLATES.footer);
-
- return sections.join("\n\n");
-}
-
// Utility: write file only if content changed
function writeFileIfChanged(filePath, content) {
const exists = fs.existsSync(filePath);