{"id":15673773,"url":"https://github.com/lmammino/mvp-contributions","last_synced_at":"2025-05-07T11:16:41.682Z","repository":{"id":143289137,"uuid":"614552693","full_name":"lmammino/mvp-contributions","owner":"lmammino","description":"CLI tool to review and submit your Microsoft MVP contributions using a YAML file","archived":false,"fork":false,"pushed_at":"2024-02-04T15:47:45.000Z","size":940,"stargazers_count":11,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-07T11:16:35.581Z","etag":null,"topics":["automation","cli","command-line","command-line-tool","microsoft","most-valuable-professional","mvp"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lmammino.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-15T20:27:58.000Z","updated_at":"2023-03-25T22:10:25.000Z","dependencies_parsed_at":"2025-03-11T01:32:28.281Z","dependency_job_id":"b9f8bfb1-18a7-4f02-882e-491f357c1a97","html_url":"https://github.com/lmammino/mvp-contributions","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmammino%2Fmvp-contributions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmammino%2Fmvp-contributions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmammino%2Fmvp-contributions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmammino%2Fmvp-contributions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lmammino","download_url":"https://codeload.github.com/lmammino/mvp-contributions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252865589,"owners_count":21816309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","cli","command-line","command-line-tool","microsoft","most-valuable-professional","mvp"],"created_at":"2024-10-03T15:42:00.684Z","updated_at":"2025-05-07T11:16:41.655Z","avatar_url":"https://github.com/lmammino.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mvp-contributions\n\n[![npm version](https://badge.fury.io/js/mvp-contributions.svg)](https://badge.fury.io/js/mvp-contributions)\n[![Node.js Package](https://github.com/lmammino/mvp-contributions/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/lmammino/mvp-contributions/actions/workflows/npm-publish.yml)\n[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\nCLI tool to review and submit your Microsoft MVP contributions\n\n\u003e [!WARNING]  \n\u003e The MVP website and APIs have been updated and this project does not work anymore. For a lower-level alternative, you can check out [`mvp-activities`](https://github.com/lmammino/mvp-activities).\n\n**Status**: **Beta quality** (manually tested, bugs are expected)\n\n![Screenshot](./docs/screenshot.png)\n\n\n## 🤨 Rationale\n\nThe MVP website is quite slow (yup, indeed Microsoft... 🤷) so it's tedious to submit a lot of stuff by hand. This tool should be able to automate most of the hard work.\n\nIt also provide convenience commands to delete entries and deduplicate them.\n\n\n## 🛠️ Requirements\n\nThis tool requires a **modern version of Node.js (18+)**\n\n\n## 🔑 Authentication\n\nGo to your browser of choice and head to [mvp.microsoft.com](https://mvp.microsoft.com/). Do a login. Inspect your cookies and copy the value for the cookie `.AspNet.Cookies`.\n\n\n## 👩‍🏫 Usage\n\nYou can use this tool with `npx` or install it locally.\n\n### `npx` usage\n\nJust run:\n\n```bash\nnpx mvp-contributions --help\n```\n\n### Local installation\n\nInstall the tool locally with\n\n```bash\nnpm i -g mvp-contributions\n```\n\nThen you can just run:\n\n```bash\nmvp-contributions --help\n```\n\n\n### Available commands\n\nThese are the commands currently supported by the tool\n\n- `list [options]`: List submitted contributions (**default command**)\n- `delete [options] \u003ccontributionId...\u003e`: Deletes one or more contributions by contribution by ID\n- `dedup [options]`: Deletes duplicated contributions\n- `submit [options] [filepath]`: Submit new contributions from contributions YAML file\n- `help [command]`: display help for command\n\nAll commands (except `help`) requires you to have a valid session token. This token can be passed either through the `-c` flag or by setting the environment variable `MVP_COOKIE` (recommended).\n\nTo get a valid session token, go to \u003chttps://mvp.microsoft.com/\u003e. Perform a login and then inspect the page with your browser developer tools. Check out the cookies (_Application_ tab in Chrome) and copy the value for the `.AspNet.Cookies` cookie.\n\n#### Example\n\nIf your `.AspNet.Cookies` value is `etzEL73OjWhpwayx...` (in reality it will be much longer than this), then you can do:\n\n```bash\nexport MVP_COOKIE=\"etzEL73OjWhpwayx...\"\nmvp-contributions list\n```\n\nor\n\n```bash\nmvp-contributions -c \"etzEL73OjWhpwayx...\" list\n```\n\n\n## 🥹 Generating YAML files from existing content\n\nThe goal of this project is to be able to come up with ways of fetching all the content activities from one or more sources and convert them to the expected YAML contribution format.\n\nSome examples are available on how you might be able to fetch and convert data from various sources:\n\n  - [YouTube videos from a channel](/docs/automation/youtube.md)\n\n\nFeel free to submit your examples here.\n\n\n## 📦 Schema\n\nYour `content.yml` file needs to follow a very specific schema.\n\nThe list of entries should be an array and every entry must have 2 fields: `type` (`string`) and `props` (`object`).\n\nThe `props` object will have a different schema depending on the selected type.\n\nHere you can find the list of all the available types (pointing to their schema file in Zod):\n\n- [`Article`](/src/schemas/Article.ts)\n- [`BlogWebsitePost`](/src/schemas/BlogWebsitePost.ts)\n- [`BookAuthor`](/src/schemas/BookAuthor.ts)\n- [`BookCoauthor`](/src/schemas/BookCoauthor.ts)\n- [`ConferenceStaffing`](/src/schemas/ConferenceStaffing.ts)\n- [`DocsMicrosoftComContribution`](/src/schemas/DocsMicrosoftComContribution.ts)\n- [`ForumModerator`](/src/schemas/ForumModerator.ts)\n- [`ForumParticipation`](/src/schemas/ForumParticipation.ts)\n- [`ForumParticipationMicrosoft`](/src/schemas/ForumParticipationMicrosoft.ts)\n- [`Mentorship`](/src/schemas/Mentorship.ts)\n- [`MicrosoftOpenSource`](/src/schemas/MicrosoftOpenSource.ts)\n- [`NonMicrosoftOpenSource`](/src/schemas/NonMicrosoftOpenSource.ts)\n- [`OrganizerConference`](/src/schemas/OrganizerConference.ts)\n- [`OrganizerUserGroup`](/src/schemas/OrganizerUserGroup.ts)\n- [`Other`](/src/schemas/Other.ts)\n- [`ProductGroupFeedback`](/src/schemas/ProductGroupFeedback.ts)\n- [`SampleCode`](/src/schemas/SampleCode.ts)\n- [`SiteOwner`](/src/schemas/SiteOwner.ts)\n- [`SpeakingConference`](/src/schemas/SpeakingConference.ts)\n- [`SpeakingUserGroup`](/src/schemas/SpeakingUserGroup.ts)\n- [`TechnicalSocialMedia`](/src/schemas/TechnicalSocialMedia.ts)\n- [`TranslationReview`](/src/schemas/TranslationReview.ts)\n- [`VideoWebcastPodcast`](/src/schemas/VideoWebcastPodcast.ts)\n- [`WorkshopVolunteerProctor`](/src/schemas/WorkshopVolunteerProctor.ts)\n\n\nNote tha the [`contributions.yml`](/contributions.yml) committed in this repository contains some commented examples that you can use as a reference.\n\nThe list of all available **Contribution Areas** is available in [`src/ContributionAreas.ts`](/src/ContributionAreas.ts)\n\n\n## 💡 Future improvement ideas\n\n- Better testing (no testing right now... confused_john_travolta.gif)\n- Support content files in JS/TS (to have a better authoring experience with autocompletion and type checking)\n- Detection of expired sessions (it generally lasts 1 hour)\n- Avoid submit duplicated content (fetch all contente first and deduplicate on insertion)\n\n\n## Contributing\n\nEveryone is very welcome to contribute to this project.\nYou can contribute just by submitting bugs or suggesting improvements by\n[opening an issue on GitHub](https://github.com/lmammino/mvp-contributions/issues).\n\n\n## License\n\nLicensed under [MIT License](LICENSE). © Luciano Mammino.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flmammino%2Fmvp-contributions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flmammino%2Fmvp-contributions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flmammino%2Fmvp-contributions/lists"}