├── assets ├── images │ ├── cat-pr.gif │ └── GH Big Banner.png └── icons │ └── icon.svg ├── .github └── workflows │ └── main.yml ├── action.yml ├── package.json ├── LICENSE ├── README.md ├── index.js └── pnpm-lock.yaml /assets/images/cat-pr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TeamTigers/minisauras/HEAD/assets/images/cat-pr.gif -------------------------------------------------------------------------------- /assets/images/GH Big Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TeamTigers/minisauras/HEAD/assets/images/GH Big Banner.png -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: minisauras 2 | 3 | on: [push] 4 | 5 | jobs: 6 | read: 7 | runs-on: ubuntu-18.04 8 | 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v2 12 | - name: Reads Root Directory 13 | uses: ./ # Uses an action in the root directory 14 | env: 15 | GITHUB_TOKEN: ${{ secrets.TOKEN }} 16 | id: dir 17 | with: 18 | directory: "./" 19 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'minisauras' 2 | description: 'A GitHub action that pulls all your JavaScript & CSS files and minify before deployment.' 3 | branding: 4 | icon: minimize-2 5 | color: blue 6 | inputs: 7 | directory: 8 | description: 'Directory reference of which files to be minified' 9 | required: true 10 | default: './' 11 | outputs: 12 | files: 13 | description: 'Test' 14 | runs: 15 | using: 'node12' 16 | main: 'dist/index.js' -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mini-sauras", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/TeamTigers/minisauras.git" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "ISC", 16 | "bugs": { 17 | "url": "https://github.com/TeamTigers/minisauras/issues" 18 | }, 19 | "homepage": "https://github.com/TeamTigers/minisauras#readme", 20 | "dependencies": { 21 | "@actions/core": "^1.2.5", 22 | "@actions/github": "^4.0.0", 23 | "@octokit/core": "^3.1.2", 24 | "@octokit/rest": "^18.0.4", 25 | "csso": "^4.0.3", 26 | "glob": "^7.1.6", 27 | "octokit-plugin-create-pull-request": "^3.9.0", 28 | "terser": "^5.3.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 TeamTigers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | ![banner](assets/icons/icon.svg) 4 | 5 | ![minisauras](https://img.shields.io/github/workflow/status/teamtigers/minisauras/minisauras?color=00c853&labelColor=212121&label=minisauras&logo=github&logoColor=ffffff) 6 | ![star](https://img.shields.io/github/stars/teamtigers/minisauras?color=536dfe&logo=github&labelColor=212121&logoColor=ffffff) 7 | ![releases](https://img.shields.io/github/v/release/teamtigers/minisauras?color=3d5afe&label=minisauras&labelColor=212121&logo=github%20actions&logoColor=ffffff) 8 | ![GitHub](https://img.shields.io/github/license/teamtigers/minisauras?color=00c853&labelColor=212121&logo=sprint&logoColor=ffffff) 9 | [![Hackathon](https://img.shields.io/badge/%20-actions%20hackathon-black?color=14171A&labelColor=3f51b5&logo=dev.to&logoColor=ffffff)](https://dev.to/_shunjid/minisauras-a-github-action-to-minify-css-and-js-files-34b9) 10 | [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fteamtigers%2Fminisauras&count_bg=%23212121&title_bg=%23512da8&icon=buzzfeed.svg&icon_color=%23FFFFFF&title=vistited&edge_flat=false)](https://hits.seeyoufarm.com) 11 | 12 |
13 | 14 | 15 | 16 | # Minisauras :tada: 17 | Minisauras is an open-source CI/CD automation tool based on :octocat: [**GitHub Actions**](https://github.com/features/actions) that pulls all the JavaScript and CSS files from your base branch, minify them and creates a pull-request with a new branch. 18 | 19 | ## How it works 20 | - Traverse through a given directory (if not provided, traverse from root), finds all the JavaScript & CSS files within it and it's sub-directories. 21 | - Afterwards, **Minisauras** minify all those files. 22 | - Finally, it creates a new branch in your repository, push those changes and creates a pull request that can be merged in your base branch. 23 | 24 | ## Usage 25 | - Create a [personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). 26 | - Then [setup a secret](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets) using that personal access token in your desired repository. 27 | - Create a workflow. For example: **main.yml** under (.github/workflows) directory. 28 | - In the workflow, provide following things: 29 | * Personal access token. For example: ${{ secrets.TOKEN }} if you set your secret with a name 'TOKEN'. 30 | * The desired directory in which you want to minify CSS and JS files. For example: './' for root and 'src/' for src directory. 31 | 32 | ## Examples 33 | 34 | _**If you want to minify all your JS and CSS files under root directory**_ 35 | 36 | ```yml 37 | name: minisauras 38 | 39 | on: [push] 40 | 41 | jobs: 42 | read: 43 | runs-on: ubuntu-18.04 44 | 45 | steps: 46 | - name: Checkout 47 | uses: actions/checkout@v2 48 | - name: minisauras 49 | uses: TeamTigers/minisauras@v2.0.0 50 | env: 51 | GITHUB_TOKEN: ${{ secrets.TOKEN }} 52 | id: dir 53 | with: 54 | directory: './' ## minify all files from root directory 55 | ``` 56 | 57 | 58 | _**If you want to minify all your JS and CSS files under your custom directory ex. assets/js & assets/css**_ 59 | 60 | ```yml 61 | name: minisauras 62 | 63 | on: [push] 64 | 65 | jobs: 66 | read: 67 | runs-on: ubuntu-18.04 68 | 69 | steps: 70 | - name: Checkout 71 | uses: actions/checkout@v2 72 | - name: minisauras 73 | uses: TeamTigers/minisauras@v2.0.0 74 | env: 75 | GITHUB_TOKEN: ${{ secrets.TOKEN }} 76 | id: dir 77 | with: 78 | directory: 'assets/' ## minify all files under assets directory 79 | ``` 80 | 81 | ## Example of usage 82 | 83 | There you go !! We have created an example repository where you can see how minisauras has minified all the CSS and JavaScript files as well as created a new branch and sent a [pull request](https://github.com/TeamTigers/minisauras-example/pull/1). 84 | 85 | 📌 Visit the example repository at : https://github.com/TeamTigers/minisauras-example 86 | 87 | 88 | [![cat](assets/images/cat-pr.gif)](https://github.com/TeamTigers/minisauras-example/) 89 | 90 | ## License 91 | This project is licensed under [MIT](LICENSE) 92 | 93 | ## If you like our work please give it a :star: 94 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const core = require("@actions/core"); 2 | const github = require("@actions/github"); 3 | const path = require("path"); 4 | const fs = require("fs"); 5 | const glob = require("glob"); 6 | const csso = require("csso"); 7 | const { 8 | minify 9 | } = require("terser"); 10 | 11 | const { 12 | Octokit 13 | } = require("@octokit/core"); 14 | const { 15 | createPullRequest 16 | } = require("octokit-plugin-create-pull-request"); 17 | const MyOctokit = Octokit.plugin(createPullRequest); 18 | 19 | /** 20 | * Reads the personal access token and desired directory 21 | * that needs to be minified from workflow. 22 | * 23 | * Exits if token is undefined or, the current branch is a newly 24 | * created branch by minisauras. 25 | * 26 | * Uses 'glob' to find all possible CSS and JS 27 | * files within the desired directory and ignores node_modules. 28 | * 29 | * Minify those files using 'csso' and 'terser' and 30 | * finally push those changes within a new branch to create a PR. 31 | */ 32 | (async function init() { 33 | try { 34 | let directory = core.getInput("directory"); 35 | const token = process.env.GITHUB_TOKEN; 36 | 37 | if (token === undefined || token.length === 0) { 38 | throw new Error(` 39 | Token not found. Please, set a secret token in your repository. 40 | To know more about creating tokens, visit: https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token 41 | To know more about setting up personal access token, visit: https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets 42 | `); 43 | } 44 | 45 | const currentBranch = github.context.ref.slice(11); 46 | if (currentBranch.startsWith('_minisauras_')) { 47 | console.log(`Code has been minifed. Branch ${currentBranch} can be merged now.`); 48 | return; 49 | } 50 | 51 | const pluginOctokit = new MyOctokit({ 52 | auth: token, 53 | }); 54 | const context = github.context; 55 | const repoInfo = context.repo; 56 | 57 | if ( 58 | directory == undefined || 59 | directory == null || 60 | directory.startsWith(".") 61 | ) 62 | directory = ""; 63 | 64 | const pattern = `${directory}**/*.{css,js}`; 65 | const options = { 66 | dot: true, 67 | ignore: ["node_modules/**/*"], 68 | }; 69 | 70 | const newBranchName = '_minisauras_' + Math.random().toString(36).slice(2); 71 | 72 | /** Using @glob to find all CSS and JS files */ 73 | glob(pattern, options, function (er, files) { 74 | if (er) throw new Error("File not found"); 75 | let final = []; 76 | 77 | files.forEach(function (file) { 78 | Promise.all([readAndMinify(file)]) 79 | .then(function (result) { 80 | final.push({ 81 | path: file, 82 | content: result[0], 83 | }); 84 | }) 85 | .finally(async function () { 86 | let encodedStructure = {}; 87 | 88 | if (final.length == files.length && !currentBranch.startsWith('_minisauras_') && files.length !== 0) { 89 | final.forEach(function (eachData) { 90 | encodedStructure[eachData.path] = eachData["content"]; 91 | }); 92 | 93 | // setting up pr description 94 | const FUNNY_CAT = 'https://media1.tenor.com/images/841aeb9f113999616d097b414c539dfd/tenor.gif'; 95 | let prDescription = 'Changes in these files:\n'; 96 | files.forEach(function (f) { 97 | prDescription += `- **${f}** \n`; 98 | }); 99 | prDescription += `![cat](${FUNNY_CAT})`; 100 | 101 | if (prDescription.includes(FUNNY_CAT)) { 102 | await pluginOctokit.createPullRequest({ 103 | owner: repoInfo.owner, 104 | repo: repoInfo.repo, 105 | title: `Minified ${files.length} files`, 106 | body: prDescription, 107 | head: newBranchName, 108 | changes: [{ 109 | files: encodedStructure, 110 | commit: `Minified ${files.length} files`, 111 | }, ], 112 | }).then(function (result) { 113 | const tableData = { 114 | 'Pull request url': result.data.url, 115 | 'Pull request title': result.data.title, 116 | 'Sent by': result.data.user.login, 117 | 'Total number of commits': result.data.commits, 118 | 'Additions': result.data.additions, 119 | 'Deletions': result.data.deletions, 120 | 'Number of files changed': result.data.changed_files 121 | } 122 | console.table(tableData); 123 | }).catch(function () { 124 | process.on('unhandledRejection', () => {}); 125 | }); 126 | } 127 | } 128 | }) 129 | .catch(function (error) { 130 | throw new Error(error); 131 | }); 132 | }); 133 | }); 134 | } catch (error) { 135 | throw new Error(error); 136 | } 137 | })(); 138 | 139 | /** 140 | * Uses terser and csso to minify JavaScript and CSS files. 141 | * @param {string} file containing file path to be minified. 142 | * 143 | * @return {string} Minified content. 144 | */ 145 | 146 | const readAndMinify = async function (file) { 147 | const content = fs.readFileSync(file, "utf8"); 148 | const extension = path.extname(file); 149 | 150 | // minify file 151 | if (extension === ".js") { 152 | const result = await minify(content, { 153 | compress: true, 154 | }); 155 | return result.code; 156 | } else if (extension === ".css") { 157 | return csso.minify(content).css; 158 | } else { 159 | console.log("Other files"); 160 | } 161 | }; -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | '@actions/core': 1.2.5 3 | '@actions/github': 4.0.0 4 | '@octokit/core': 3.1.2 5 | '@octokit/rest': 18.0.5 6 | csso: 4.0.3 7 | glob: 7.1.6 8 | octokit-plugin-create-pull-request: 3.9.0 9 | terser: 5.3.0 10 | lockfileVersion: 5.1 11 | packages: 12 | /@actions/core/1.2.5: 13 | dev: false 14 | resolution: 15 | integrity: sha512-mwpoNjHSWWh0IiALdDEQi3tru124JKn0yVNziIBzTME8QRv7thwoghVuT1jBRjFvdtoHsqD58IRHy1nf86paRg== 16 | /@actions/github/4.0.0: 17 | dependencies: 18 | '@actions/http-client': 1.0.8 19 | '@octokit/core': 3.1.2 20 | '@octokit/plugin-paginate-rest': 2.3.2_@octokit+core@3.1.2 21 | '@octokit/plugin-rest-endpoint-methods': 4.1.4 22 | dev: false 23 | resolution: 24 | integrity: sha512-Ej/Y2E+VV6sR9X7pWL5F3VgEWrABaT292DRqRU6R4hnQjPtC/zD3nagxVdXWiRQvYDh8kHXo7IDmG42eJ/dOMA== 25 | /@actions/http-client/1.0.8: 26 | dependencies: 27 | tunnel: 0.0.6 28 | dev: false 29 | resolution: 30 | integrity: sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA== 31 | /@octokit/auth-token/2.4.2: 32 | dependencies: 33 | '@octokit/types': 5.4.1 34 | dev: false 35 | resolution: 36 | integrity: sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== 37 | /@octokit/core/3.1.2: 38 | dependencies: 39 | '@octokit/auth-token': 2.4.2 40 | '@octokit/graphql': 4.5.4 41 | '@octokit/request': 5.4.7 42 | '@octokit/types': 5.4.1 43 | before-after-hook: 2.1.0 44 | universal-user-agent: 6.0.0 45 | dev: false 46 | resolution: 47 | integrity: sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw== 48 | /@octokit/endpoint/6.0.5: 49 | dependencies: 50 | '@octokit/types': 5.4.1 51 | is-plain-object: 4.1.1 52 | universal-user-agent: 6.0.0 53 | dev: false 54 | resolution: 55 | integrity: sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ== 56 | /@octokit/graphql/4.5.4: 57 | dependencies: 58 | '@octokit/request': 5.4.7 59 | '@octokit/types': 5.4.1 60 | universal-user-agent: 6.0.0 61 | dev: false 62 | resolution: 63 | integrity: sha512-ITpZ+dQc0cXAW1FmDkHJJM+8Lb6anUnin0VB5hLBilnYVdLC0ICFU/KIvT7OXfW9S81DE3U4Vx2EypDG1OYaPA== 64 | /@octokit/plugin-paginate-rest/2.3.2_@octokit+core@3.1.2: 65 | dependencies: 66 | '@octokit/core': 3.1.2 67 | '@octokit/types': 5.4.1 68 | dev: false 69 | peerDependencies: 70 | '@octokit/core': '>=2' 71 | resolution: 72 | integrity: sha512-PjHbMhKryxClCrmfvRpGaKCTxUcHIf2zirWRV9SMGf0EmxD/rFew/abSqbMiLl9uQgRZvqtTyCRMGMlUv1ZsBg== 73 | /@octokit/plugin-request-log/1.0.0: 74 | dev: false 75 | resolution: 76 | integrity: sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== 77 | /@octokit/plugin-rest-endpoint-methods/4.1.4: 78 | dependencies: 79 | '@octokit/types': 5.4.1 80 | deprecation: 2.3.1 81 | dev: false 82 | resolution: 83 | integrity: sha512-Y2tVpSa7HjV3DGIQrQOJcReJ2JtcN9FaGr9jDa332Flro923/h3/Iu9e7Y4GilnzfLclHEh5iCQoCkHm7tWOcg== 84 | /@octokit/request-error/2.0.2: 85 | dependencies: 86 | '@octokit/types': 5.4.1 87 | deprecation: 2.3.1 88 | once: 1.4.0 89 | dev: false 90 | resolution: 91 | integrity: sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== 92 | /@octokit/request/5.4.7: 93 | dependencies: 94 | '@octokit/endpoint': 6.0.5 95 | '@octokit/request-error': 2.0.2 96 | '@octokit/types': 5.4.1 97 | deprecation: 2.3.1 98 | is-plain-object: 4.1.1 99 | node-fetch: 2.6.1 100 | once: 1.4.0 101 | universal-user-agent: 6.0.0 102 | dev: false 103 | resolution: 104 | integrity: sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A== 105 | /@octokit/rest/18.0.5: 106 | dependencies: 107 | '@octokit/core': 3.1.2 108 | '@octokit/plugin-paginate-rest': 2.3.2_@octokit+core@3.1.2 109 | '@octokit/plugin-request-log': 1.0.0 110 | '@octokit/plugin-rest-endpoint-methods': 4.1.4 111 | dev: false 112 | resolution: 113 | integrity: sha512-SPKI24tQXrr1XsnaIjv2x0rl4M5eF1+hj8+vMe3d/exZ7NnL5sTe1BuFyCyJyrc+j1HkXankvgGN9zT0rwBwtg== 114 | /@octokit/types/5.4.1: 115 | dependencies: 116 | '@types/node': 14.6.4 117 | dev: false 118 | resolution: 119 | integrity: sha512-OlMlSySBJoJ6uozkr/i03nO5dlYQyE05vmQNZhAh9MyO4DPBP88QlwsDVLmVjIMFssvIZB6WO0ctIGMRG+xsJQ== 120 | /@types/node/14.6.4: 121 | dev: false 122 | resolution: 123 | integrity: sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ== 124 | /balanced-match/1.0.0: 125 | dev: false 126 | resolution: 127 | integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 128 | /before-after-hook/2.1.0: 129 | dev: false 130 | resolution: 131 | integrity: sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== 132 | /brace-expansion/1.1.11: 133 | dependencies: 134 | balanced-match: 1.0.0 135 | concat-map: 0.0.1 136 | dev: false 137 | resolution: 138 | integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 139 | /buffer-from/1.1.1: 140 | dev: false 141 | resolution: 142 | integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 143 | /commander/2.20.3: 144 | dev: false 145 | resolution: 146 | integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 147 | /concat-map/0.0.1: 148 | dev: false 149 | resolution: 150 | integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 151 | /css-tree/1.0.0-alpha.39: 152 | dependencies: 153 | mdn-data: 2.0.6 154 | source-map: 0.6.1 155 | dev: false 156 | engines: 157 | node: '>=8.0.0' 158 | resolution: 159 | integrity: sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== 160 | /csso/4.0.3: 161 | dependencies: 162 | css-tree: 1.0.0-alpha.39 163 | dev: false 164 | engines: 165 | node: '>=8.0.0' 166 | resolution: 167 | integrity: sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== 168 | /deprecation/2.3.1: 169 | dev: false 170 | resolution: 171 | integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 172 | /fs.realpath/1.0.0: 173 | dev: false 174 | resolution: 175 | integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 176 | /glob/7.1.6: 177 | dependencies: 178 | fs.realpath: 1.0.0 179 | inflight: 1.0.6 180 | inherits: 2.0.4 181 | minimatch: 3.0.4 182 | once: 1.4.0 183 | path-is-absolute: 1.0.1 184 | dev: false 185 | resolution: 186 | integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 187 | /inflight/1.0.6: 188 | dependencies: 189 | once: 1.4.0 190 | wrappy: 1.0.2 191 | dev: false 192 | resolution: 193 | integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 194 | /inherits/2.0.4: 195 | dev: false 196 | resolution: 197 | integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 198 | /is-plain-object/4.1.1: 199 | dev: false 200 | engines: 201 | node: '>=0.10.0' 202 | resolution: 203 | integrity: sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== 204 | /mdn-data/2.0.6: 205 | dev: false 206 | resolution: 207 | integrity: sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== 208 | /minimatch/3.0.4: 209 | dependencies: 210 | brace-expansion: 1.1.11 211 | dev: false 212 | resolution: 213 | integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 214 | /node-fetch/2.6.1: 215 | dev: false 216 | engines: 217 | node: 4.x || >=6.0.0 218 | resolution: 219 | integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 220 | /octokit-plugin-create-pull-request/3.9.0: 221 | dev: false 222 | resolution: 223 | integrity: sha512-0NaBjEeVS66+Hxbt8x6JpzUe+x1ljDCILhsYYBaNB8jYRoW8EObEoZGepbqKQAeIqtGHYGZLEHSH/c69bxHySA== 224 | /once/1.4.0: 225 | dependencies: 226 | wrappy: 1.0.2 227 | dev: false 228 | resolution: 229 | integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 230 | /path-is-absolute/1.0.1: 231 | dev: false 232 | engines: 233 | node: '>=0.10.0' 234 | resolution: 235 | integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 236 | /source-map-support/0.5.19: 237 | dependencies: 238 | buffer-from: 1.1.1 239 | source-map: 0.6.1 240 | dev: false 241 | resolution: 242 | integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 243 | /source-map/0.6.1: 244 | dev: false 245 | engines: 246 | node: '>=0.10.0' 247 | resolution: 248 | integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 249 | /terser/5.3.0: 250 | dependencies: 251 | commander: 2.20.3 252 | source-map: 0.6.1 253 | source-map-support: 0.5.19 254 | dev: false 255 | engines: 256 | node: '>=6.0.0' 257 | hasBin: true 258 | resolution: 259 | integrity: sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg== 260 | /tunnel/0.0.6: 261 | dev: false 262 | engines: 263 | node: '>=0.6.11 <=0.7.0 || >=0.7.3' 264 | resolution: 265 | integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== 266 | /universal-user-agent/6.0.0: 267 | dev: false 268 | resolution: 269 | integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 270 | /wrappy/1.0.2: 271 | dev: false 272 | resolution: 273 | integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 274 | specifiers: 275 | '@actions/core': ^1.2.5 276 | '@actions/github': ^4.0.0 277 | '@octokit/core': ^3.1.2 278 | '@octokit/rest': ^18.0.4 279 | csso: ^4.0.3 280 | glob: ^7.1.6 281 | octokit-plugin-create-pull-request: ^3.9.0 282 | terser: ^5.3.0 283 | -------------------------------------------------------------------------------- /assets/icons/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | --------------------------------------------------------------------------------