├── .github ├── dependabot.yml └── workflows │ └── automate_ncc.yml ├── .gitignore ├── LICENSE ├── README.MD ├── action.yml ├── dist └── index.js ├── index.js ├── package-lock.json └── package.json /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "monthly" 12 | -------------------------------------------------------------------------------- /.github/workflows/automate_ncc.yml: -------------------------------------------------------------------------------- 1 | name: Build with ncc 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v2 12 | 13 | - name: Install dependencies 14 | run: npm ci 15 | 16 | - name: Build with ncc 17 | run: npx @vercel/ncc build index.js -o dist 18 | 19 | - name: Create new branch and commit changes 20 | id: create_branch 21 | run: | 22 | git config --global user.email "actions@github.com" 23 | git config --global user.name "GitHub Action" 24 | BRANCH_NAME=automated-build-$(date +'%Y%m%d%H%M%S') 25 | git checkout -b $BRANCH_NAME 26 | git add dist/index.js 27 | git commit -m "Automated build" 28 | git push origin $BRANCH_NAME 29 | echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 chkfung 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 | # android-version-action v1.2.2 2 | Override your android version number and version code through github actions 3 | 4 | ## Features 5 | * Override version number to bump version through github actions 6 | * Override version name 7 | 8 | ## Parameters 9 | `gradlePath` 10 | **Required**, File path to the **Path to the build.gradle file** so that it knows where to find the file that contains the versionCode and versionName attributes. 11 | 12 | `versionCode` 13 | **Optional**, Version Code to override 14 | 15 | `versionName` 16 | **Optional**, Version Name to override 17 | 18 | ## Example 19 | ``` 20 | jobs: 21 | build: 22 | runs-on: ubuntu-latest 23 | 24 | steps: 25 | - uses: actions/checkout@v4 26 | - name: set up JDK 1.11 27 | uses: actions/setup-java@v4 28 | with: 29 | distribution: 'temurin' 30 | java-version: 11.0.22+7 31 | - name: Bump version 32 | uses: chkfung/android-version-actions@v1.2.2 33 | with: 34 | gradlePath: app/build.gradle # or app/build.gradle.kts 35 | versionCode: ${{github.run_number}} 36 | versionName: 1.0.0 37 | ``` 38 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: "Increment the version code of your project" 2 | description: "This action will increment the version code directly in build.gradle . " 3 | inputs: 4 | gradlePath: 5 | description: "Gradle path to override version" 6 | required: true 7 | default: "app/build.gradle" 8 | versionCode: 9 | description: "The new version code" 10 | required: false 11 | versionName: 12 | description: "The new version name" 13 | required: false 14 | outputs: 15 | result: # id of output 16 | description: "Action Result" 17 | runs: 18 | using: "node20" 19 | main: "dist/index.js" 20 | branding: 21 | color: 'blue' 22 | icon: 'anchor' 23 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const core = require('@actions/core'); 2 | const github = require('@actions/github'); 3 | const fs = require('fs'); 4 | 5 | // versionCode — A positive integer [...] -> https://developer.android.com/studio/publish/versioning 6 | const versionCodeRegexPattern = /(versionCode(?:\s|=)*)(.*)/; 7 | // versionName — A string used as the version number shown to users [...] -> https://developer.android.com/studio/publish/versioning 8 | const versionNameRegexPattern = /(versionName(?:\s|=)*)(.*)/; 9 | 10 | try { 11 | const gradlePath = core.getInput('gradlePath'); 12 | const versionCode = core.getInput('versionCode'); 13 | const versionName = core.getInput('versionName'); 14 | console.log(`Gradle Path : ${gradlePath}`); 15 | console.log(`Version Code : ${versionCode}`); 16 | console.log(`Version Name : ${versionName}`); 17 | 18 | fs.readFile(gradlePath, 'utf8', function (err, data) { 19 | newGradle = data; 20 | if (versionCode.length > 0) 21 | newGradle = newGradle.replace(versionCodeRegexPattern, `$1${versionCode}`); 22 | if (versionName.length > 0) 23 | newGradle = newGradle.replace(versionNameRegexPattern, `$1\"${versionName}\"`); 24 | fs.writeFile(gradlePath, newGradle, function (err) { 25 | if (err) throw err; 26 | if (versionCode.length > 0) 27 | console.log(`Successfully override version code ${versionCode}`) 28 | if (versionName.length > 0) 29 | console.log(`Successfully override version code ${versionName}`) 30 | core.setOutput("result", `Done`); 31 | }); 32 | }); 33 | 34 | } catch (error) { 35 | core.setFailed(error.message); 36 | } 37 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "android-version-action", 3 | "version": "1.2.2", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "android-version-action", 9 | "version": "1.2.2", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@actions/core": "^1.2.6", 13 | "@actions/github": "^4.0.0" 14 | }, 15 | "devDependencies": { 16 | "@vercel/ncc": "^0.38.1" 17 | } 18 | }, 19 | "node_modules/@actions/core": { 20 | "version": "1.10.1", 21 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", 22 | "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", 23 | "dependencies": { 24 | "@actions/http-client": "^2.0.1", 25 | "uuid": "^8.3.2" 26 | } 27 | }, 28 | "node_modules/@actions/github": { 29 | "version": "4.0.0", 30 | "resolved": "https://registry.npmjs.org/@actions/github/-/github-4.0.0.tgz", 31 | "integrity": "sha512-Ej/Y2E+VV6sR9X7pWL5F3VgEWrABaT292DRqRU6R4hnQjPtC/zD3nagxVdXWiRQvYDh8kHXo7IDmG42eJ/dOMA==", 32 | "dependencies": { 33 | "@actions/http-client": "^1.0.8", 34 | "@octokit/core": "^3.0.0", 35 | "@octokit/plugin-paginate-rest": "^2.2.3", 36 | "@octokit/plugin-rest-endpoint-methods": "^4.0.0" 37 | } 38 | }, 39 | "node_modules/@actions/github/node_modules/@actions/http-client": { 40 | "version": "1.0.11", 41 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", 42 | "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", 43 | "dependencies": { 44 | "tunnel": "0.0.6" 45 | } 46 | }, 47 | "node_modules/@actions/http-client": { 48 | "version": "2.2.0", 49 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", 50 | "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", 51 | "dependencies": { 52 | "tunnel": "^0.0.6", 53 | "undici": "^5.25.4" 54 | } 55 | }, 56 | "node_modules/@fastify/busboy": { 57 | "version": "2.1.0", 58 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", 59 | "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", 60 | "engines": { 61 | "node": ">=14" 62 | } 63 | }, 64 | "node_modules/@octokit/auth-token": { 65 | "version": "2.5.0", 66 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", 67 | "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", 68 | "dependencies": { 69 | "@octokit/types": "^6.0.3" 70 | } 71 | }, 72 | "node_modules/@octokit/core": { 73 | "version": "3.6.0", 74 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", 75 | "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", 76 | "dependencies": { 77 | "@octokit/auth-token": "^2.4.4", 78 | "@octokit/graphql": "^4.5.8", 79 | "@octokit/request": "^5.6.3", 80 | "@octokit/request-error": "^2.0.5", 81 | "@octokit/types": "^6.0.3", 82 | "before-after-hook": "^2.2.0", 83 | "universal-user-agent": "^6.0.0" 84 | } 85 | }, 86 | "node_modules/@octokit/endpoint": { 87 | "version": "6.0.12", 88 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", 89 | "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", 90 | "dependencies": { 91 | "@octokit/types": "^6.0.3", 92 | "is-plain-object": "^5.0.0", 93 | "universal-user-agent": "^6.0.0" 94 | } 95 | }, 96 | "node_modules/@octokit/graphql": { 97 | "version": "4.8.0", 98 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", 99 | "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", 100 | "dependencies": { 101 | "@octokit/request": "^5.6.0", 102 | "@octokit/types": "^6.0.3", 103 | "universal-user-agent": "^6.0.0" 104 | } 105 | }, 106 | "node_modules/@octokit/openapi-types": { 107 | "version": "12.11.0", 108 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", 109 | "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" 110 | }, 111 | "node_modules/@octokit/plugin-paginate-rest": { 112 | "version": "2.21.3", 113 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", 114 | "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", 115 | "dependencies": { 116 | "@octokit/types": "^6.40.0" 117 | }, 118 | "peerDependencies": { 119 | "@octokit/core": ">=2" 120 | } 121 | }, 122 | "node_modules/@octokit/plugin-rest-endpoint-methods": { 123 | "version": "4.15.1", 124 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.15.1.tgz", 125 | "integrity": "sha512-4gQg4ySoW7ktKB0Mf38fHzcSffVZd6mT5deJQtpqkuPuAqzlED5AJTeW8Uk7dPRn7KaOlWcXB0MedTFJU1j4qA==", 126 | "dependencies": { 127 | "@octokit/types": "^6.13.0", 128 | "deprecation": "^2.3.1" 129 | }, 130 | "peerDependencies": { 131 | "@octokit/core": ">=3" 132 | } 133 | }, 134 | "node_modules/@octokit/request": { 135 | "version": "5.6.3", 136 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", 137 | "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", 138 | "dependencies": { 139 | "@octokit/endpoint": "^6.0.1", 140 | "@octokit/request-error": "^2.1.0", 141 | "@octokit/types": "^6.16.1", 142 | "is-plain-object": "^5.0.0", 143 | "node-fetch": "^2.6.7", 144 | "universal-user-agent": "^6.0.0" 145 | } 146 | }, 147 | "node_modules/@octokit/request-error": { 148 | "version": "2.1.0", 149 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", 150 | "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", 151 | "dependencies": { 152 | "@octokit/types": "^6.0.3", 153 | "deprecation": "^2.0.0", 154 | "once": "^1.4.0" 155 | } 156 | }, 157 | "node_modules/@octokit/types": { 158 | "version": "6.41.0", 159 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", 160 | "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", 161 | "dependencies": { 162 | "@octokit/openapi-types": "^12.11.0" 163 | } 164 | }, 165 | "node_modules/@vercel/ncc": { 166 | "version": "0.38.1", 167 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz", 168 | "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==", 169 | "dev": true, 170 | "bin": { 171 | "ncc": "dist/ncc/cli.js" 172 | } 173 | }, 174 | "node_modules/before-after-hook": { 175 | "version": "2.2.3", 176 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", 177 | "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" 178 | }, 179 | "node_modules/deprecation": { 180 | "version": "2.3.1", 181 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 182 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 183 | }, 184 | "node_modules/is-plain-object": { 185 | "version": "5.0.0", 186 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 187 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 188 | "engines": { 189 | "node": ">=0.10.0" 190 | } 191 | }, 192 | "node_modules/node-fetch": { 193 | "version": "2.7.0", 194 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 195 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 196 | "dependencies": { 197 | "whatwg-url": "^5.0.0" 198 | }, 199 | "engines": { 200 | "node": "4.x || >=6.0.0" 201 | }, 202 | "peerDependencies": { 203 | "encoding": "^0.1.0" 204 | }, 205 | "peerDependenciesMeta": { 206 | "encoding": { 207 | "optional": true 208 | } 209 | } 210 | }, 211 | "node_modules/once": { 212 | "version": "1.4.0", 213 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 214 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 215 | "dependencies": { 216 | "wrappy": "1" 217 | } 218 | }, 219 | "node_modules/tr46": { 220 | "version": "0.0.3", 221 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 222 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 223 | }, 224 | "node_modules/tunnel": { 225 | "version": "0.0.6", 226 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 227 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 228 | "engines": { 229 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 230 | } 231 | }, 232 | "node_modules/undici": { 233 | "version": "5.28.4", 234 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 235 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 236 | "dependencies": { 237 | "@fastify/busboy": "^2.0.0" 238 | }, 239 | "engines": { 240 | "node": ">=14.0" 241 | } 242 | }, 243 | "node_modules/universal-user-agent": { 244 | "version": "6.0.1", 245 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", 246 | "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" 247 | }, 248 | "node_modules/uuid": { 249 | "version": "8.3.2", 250 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 251 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 252 | "bin": { 253 | "uuid": "dist/bin/uuid" 254 | } 255 | }, 256 | "node_modules/webidl-conversions": { 257 | "version": "3.0.1", 258 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 259 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 260 | }, 261 | "node_modules/whatwg-url": { 262 | "version": "5.0.0", 263 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 264 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 265 | "dependencies": { 266 | "tr46": "~0.0.3", 267 | "webidl-conversions": "^3.0.0" 268 | } 269 | }, 270 | "node_modules/wrappy": { 271 | "version": "1.0.2", 272 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 273 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 274 | } 275 | } 276 | } 277 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "android-version-action", 3 | "version": "1.2.2", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build": "ncc build index.js -o dist" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@actions/core": "^1.2.6", 15 | "@actions/github": "^4.0.0" 16 | }, 17 | "devDependencies": { 18 | "@vercel/ncc": "^0.38.1" 19 | } 20 | } 21 | --------------------------------------------------------------------------------