diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index d1a494c..0000000 --- a/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -.git -.github -.res -.editorconfig -.gitignore -action.yml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e3610b3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/lib/** linguist-detectable=false +/node_modules/** linguist-detectable=false diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index 5f62b85..0000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: docker - -on: - pull_request: - branches: - - master - push: - branches: - - master - tags: - - v* - -jobs: - release: - runs-on: ubuntu-latest - steps: - - - name: Set TAG_NAME - if: startsWith(github.ref, 'refs/tags/') - run: | - echo "##[set-env name=TAG_NAME;]${GITHUB_REF#refs/tags/}" - - - name: Checkout - uses: actions/checkout@v1 - - - name: Docker Build - run: | - docker build \ - --build-arg "VERSION=${TAG_NAME}" \ - --tag "crazymax/ghaction-github-pages:${TAG_NAME:-snapshot}" \ - --tag "crazymax/ghaction-github-pages:latest" \ - --file Dockerfile . - - - name: Docker Login - if: success() && startsWith(github.ref, 'refs/tags/v') - env: - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - run: | - echo "${DOCKER_PASSWORD}" | docker login --username crazymax --password-stdin - - - name: Docker Push - if: success() && startsWith(github.ref, 'refs/tags/v') - run: | - docker push crazymax/ghaction-github-pages diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..ab4ad09 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,23 @@ +name: lint + +on: + pull_request: + branches: + - master + - releases/* + paths: + - src/* + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v1 + - + name: Setup TS + run: npm install tslint typescript -g + - + name: Lint check + run: tslint './src/*.ts' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..07188f0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,68 @@ +name: release + +on: + push: + branches-ignore: + - '**' + tags: + - 'v*.*.*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v1 + - + name: Prepare + id: prepare + run: | + TAG=${GITHUB_REF#refs/tags/} + MINOR=${TAG%.*} + MAJOR=${MINOR%.*} + echo ::set-output name=tag_name::${TAG} + echo ::set-output name=minor_tag::${MINOR} + echo ::set-output name=major_tag::${MAJOR} + echo ::set-output name=major_exists::$(git show-ref origin/releases/${MAJOR}) + - + name: Set up Git + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git + - + name: Checkout releases/${{ steps.prepare.outputs.major_tag }} branch + run: | + git checkout -B releases/${{ steps.prepare.outputs.major_tag }} + if [ -n "${{ steps.prepare.outputs.major_exists }}" ]; then + git branch --set-upstream-to=origin/releases/${{ steps.prepare.outputs.major_tag }} releases/${{ steps.prepare.outputs.major_tag }} + fi + - + name: NPM production deps + run: | + rm -rf node_modules + sed -i '/node_modules/d' .gitignore + npm install --production + - + name: Commit and push changes + run: | + git add --all + git status --short -uno + git commit -m 'Release ${{ steps.prepare.outputs.tag_name }}' + git show --stat-count=10 HEAD + git push -f origin releases/${{ steps.prepare.outputs.major_tag }} + - + name: Update ${{ steps.prepare.outputs.minor_tag }} tag + run: | + git push origin :refs/tags/${{ steps.prepare.outputs.minor_tag }} + git tag -fa ${{ steps.prepare.outputs.minor_tag }} -m "Release ${{ steps.prepare.outputs.tag_name }}" + git push origin ${{ steps.prepare.outputs.minor_tag }} + - + name: Update ${{ steps.prepare.outputs.major_tag }} tag + run: | + git push origin :refs/tags/${{ steps.prepare.outputs.major_tag }} + git tag -fa ${{ steps.prepare.outputs.major_tag }} -m "Release ${{ steps.prepare.outputs.tag_name }}" + git push origin ${{ steps.prepare.outputs.major_tag }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 69bc4bb..d856fd5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,7 +30,7 @@ jobs: - name: Deploy if: success() - uses: crazy-max/ghaction-github-pages@master + uses: ./ with: target_branch: test build_dir: public diff --git a/.gitignore b/.gitignore index 81da0ce..61502e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,97 @@ +/.dev + # Jetbrains /.idea /*.iml -/public +# Ignore node_modules on active branch +node_modules/ + +# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..0f75650 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": false, + "arrowParens": "avoid", + "parser": "typescript" +} diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index e7ee085..0000000 --- a/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM alpine:latest - -ARG VERSION - -# https://help.github.com/en/articles/metadata-syntax-for-github-actions#about-yaml-syntax-for-github-actions -LABEL version="$VERSION" \ - repository="https://github.com/crazy-max/ghaction-github-pages" \ - homepage="https://github.com/crazy-max/ghaction-github-pages" \ - maintainer="CrazyMax" \ - "com.github.actions.name"="GitHub Pages" \ - "com.github.actions.description"="GitHub Action for deploying GitHub Pages" \ - "com.github.actions.icon"="upload-cloud" \ - "com.github.actions.color"="green" - -RUN apk --update --no-cache add \ - curl \ - git \ - && rm -rf /var/cache/apk/* /tmp/* - -COPY LICENSE README.md / -ADD entrypoint.sh / -ENTRYPOINT [ "/entrypoint.sh" ] diff --git a/README.md b/README.md index 79bfed3..05be05b 100644 --- a/README.md +++ b/README.md @@ -52,18 +52,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` -Docker :whale: image is also provided and automatically updated within [Docker Hub](https://hub.docker.com/r/crazymax/ghaction-github-pages/tags) so you can directly use the following [Docker Hub action](https://help.github.com/en/articles/workflow-syntax-for-github-actions#example-using-a-docker-hub-action): - -```yaml -- name: Deploy - if: success() - uses: docker://crazymax/ghaction-github-pages - env: - INPUT_TARGET_BRANCH: gh-pages - INPUT_BUILD_DIR: public - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -``` - ## ๐Ÿ’… Customizing ### inputs diff --git a/action.yml b/action.yml index 9d9a0ff..f3432de 100644 --- a/action.yml +++ b/action.yml @@ -13,11 +13,9 @@ inputs: description: 'Git branch where assets will be deployed' default: 'gh-pages' build_dir: - description: 'Path to build directory to deploy' + description: 'Build directory to deploy' required: true runs: - using: 'docker' - image: 'Dockerfile' - env: - GITHUB_TOKEN: 'As provided by GitHub Actions' + using: 'node12' + main: 'lib/main.js' diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100755 index 218c65d..0000000 --- a/entrypoint.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -set -e - -REPO=${INPUT_REPO:-$GITHUB_REPOSITORY} - -if [ -z "$INPUT_TARGET_BRANCH" ]; then - echo "โ›”๏ธ Target branch not defined" - exit 1 -fi -if [ ! -d "$INPUT_BUILD_DIR" ]; then - echo "โ›”๏ธ Build dir does not exist" - exit 1 -fi - -echo "๐Ÿƒ Deploying $INPUT_BUILD_DIR directory to $INPUT_TARGET_BRANCH branch" -cd "$INPUT_BUILD_DIR" - -git init -git config user.name "${GITHUB_ACTOR}" -git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" -git add . -git commit --allow-empty -m 'Deploy to GitHub pages' -git push --force --quiet "https://${GITHUB_PAT:-"x-access-token:$GITHUB_TOKEN"}@github.com/${REPO}.git" "master:${INPUT_TARGET_BRANCH}" -rm -rf .git - -# Tried https://developer.github.com/v3/repos/pages/#request-a-page-build -# but not working: { "message": "Resource not accessible by integration", "documentation_url": "https://developer.github.com/v3/repos/pages/#request-a-page-build" } -# curl -XPOST -H"Authorization: token ${GITHUB_TOKEN}" -H"Accept: application/vnd.github.mister-fantastic-preview+json" https://api.github.com/repos/${GITHUB_REPOSITORY}/pages/builds - -cd "$GITHUB_WORKSPACE" -echo "๐ŸŽ‰ Content of $INPUT_BUILD_DIR has been deployed to GitHub Pages." diff --git a/lib/main.js b/lib/main.js new file mode 100644 index 0000000..3638166 --- /dev/null +++ b/lib/main.js @@ -0,0 +1,84 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const child_process = __importStar(require("child_process")); +const fs = __importStar(require("fs")); +const core = __importStar(require("@actions/core")); +const exec = __importStar(require("@actions/exec")); +function run() { + return __awaiter(this, void 0, void 0, function* () { + try { + const repo = core.getInput('repo') || process.env['GITHUB_REPOSITORY'] || ''; + const target_branch = core.getInput('target_branch') || 'gh-pages'; + const build_dir = core.getInput('build_dir', { required: true }); + const username = process.env['GITHUB_ACTOR'] || 'github-actions'; + if (!fs.existsSync(build_dir)) { + core.setFailed('โ›”๏ธ Build dir does not exist'); + return; + } + core.info(`๐Ÿƒ Deploying ${build_dir} directory to ${target_branch} branch on ${repo} repo`); + process.chdir(build_dir); + yield exec.exec('git', ['init']); + yield exec.exec('git', ['config', 'user.name', username]); + yield exec.exec('git', [ + 'config', + 'user.email', + `${username}@users.noreply.github.com` + ]); + try { + child_process.execSync('git status --porcelain').toString(); + } + catch (err) { + core.info('โš ๏ธNothing to deploy'); + return; + } + yield exec.exec('git', ['add', '.']); + yield exec.exec('git', [ + 'commit', + '--allow-empty', + '-m', + 'Deploy to GitHub pages' + ]); + let gitURL = String('https://'); + if (process.env['GITHUB_PAT']) { + gitURL.concat(process.env['GITHUB_PAT']); + } + else if (process.env['GITHUB_TOKEN']) { + gitURL.concat('x-access-token:', process.env['GITHUB_TOKEN']); + } + else { + core.setFailed('โŒ๏ธ You have to provide a GITHUB_TOKEN or GITHUB_PAT'); + return; + } + gitURL.concat('@github.com/', repo, '.git'); + yield exec.exec('git', [ + 'push', + '--force', + '--quiet', + gitURL, + `master:${target_branch}` + ]); + process.chdir(process.env['GITHUB_WORKSPACE'] || '.'); + core.info(`๐ŸŽ‰ Content of $INPUT_BUILD_DIR has been deployed to GitHub Pages.`); + } + catch (error) { + core.setFailed(error.message); + } + }); +} +run(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3e56b01 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,111 @@ +{ + "name": "github-pages", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@actions/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.3.tgz", + "integrity": "sha512-2BIib53Jh4Cfm+1XNuZYYGTeRo8yiWEAUMoliMh1qQGMaqTF4VUlhhcsBylTu4qWmUx45DrY0y0XskimAHSqhw==" + }, + "@actions/exec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.1.tgz", + "integrity": "sha512-nvFkxwiicvpzNiCBF4wFBDfnBvi7xp/as7LE1hBxBxKG2L29+gkIPBiLKMVORL+Hg3JNf07AKRfl0V5djoypjQ==" + }, + "@actions/io": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.1.tgz", + "integrity": "sha512-rhq+tfZukbtaus7xyUtwKfuiCRXd1hWSfmJNEpFgBQJ4woqPEpsBw04awicjwz9tyG2/MVhAEMfVn664Cri5zA==", + "dev": true + }, + "@types/node": { + "version": "12.7.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", + "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==", + "dev": true + }, + "commandpost": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.4.0.tgz", + "integrity": "sha512-aE2Y4MTFJ870NuB/+2z1cXBhSBBzRydVVjzhFC4gtenEhpnj15yu0qptWGJsO9YGrcPZ3ezX8AWb1VA391MKpQ==", + "dev": true + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", + "dev": true + } + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", + "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", + "dev": true + }, + "typescript-formatter": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/typescript-formatter/-/typescript-formatter-7.2.2.tgz", + "integrity": "sha512-V7vfI9XArVhriOTYHPzMU2WUnm5IMdu9X/CPxs8mIMGxmTBFpDABlbkBka64PZJ9/xgQeRpK8KzzAG4MPzxBDQ==", + "dev": true, + "requires": { + "commandpost": "^1.0.0", + "editorconfig": "^0.15.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f3f63a3 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "github-pages", + "description": "GitHub Action for deploying GitHub Pages", + "main": "lib/main.js", + "directories": { + "lib": "lib" + }, + "scripts": { + "build": "tsc", + "format": "prettier --write **/*.ts", + "format-check": "prettier --check **/*.ts", + "prune": "npm prune --production" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/crazy-max/ghaction-docker-buildx.git" + }, + "keywords": [ + "actions", + "github", + "pages", + "deploy" + ], + "author": "CrazyMax", + "license": "MIT", + "dependencies": { + "@actions/core": "^1.1.3", + "@actions/exec": "^1.0.1" + }, + "devDependencies": { + "@actions/io": "^1.0.0", + "@types/node": "^12.7.12", + "prettier": "^1.17.1", + "typescript": "^3.5.1", + "typescript-formatter": "^7.2.2" + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..2d7e06f --- /dev/null +++ b/src/main.ts @@ -0,0 +1,74 @@ +import * as child_process from 'child_process'; +import * as fs from 'fs'; +import * as core from '@actions/core'; +import * as exec from '@actions/exec'; + +async function run() { + try { + const repo = + core.getInput('repo') || process.env['GITHUB_REPOSITORY'] || ''; + const target_branch = core.getInput('target_branch') || 'gh-pages'; + const build_dir = core.getInput('build_dir', {required: true}); + const username = process.env['GITHUB_ACTOR'] || 'github-actions'; + + if (!fs.existsSync(build_dir)) { + core.setFailed('โ›”๏ธ Build dir does not exist'); + return; + } + + core.info( + `๐Ÿƒ Deploying ${build_dir} directory to ${target_branch} branch on ${repo} repo` + ); + + process.chdir(build_dir); + await exec.exec('git', ['init']); + await exec.exec('git', ['config', 'user.name', username]); + await exec.exec('git', [ + 'config', + 'user.email', + `${username}@users.noreply.github.com` + ]); + + try { + child_process.execSync('git status --porcelain').toString(); + } catch (err) { + core.info('โš ๏ธNothing to deploy'); + return; + } + + await exec.exec('git', ['add', '.']); + await exec.exec('git', [ + 'commit', + '--allow-empty', + '-m', + 'Deploy to GitHub pages' + ]); + + let gitURL = String('https://'); + if (process.env['GITHUB_PAT']) { + gitURL.concat(process.env['GITHUB_PAT']); + } else if (process.env['GITHUB_TOKEN']) { + gitURL.concat('x-access-token:', process.env['GITHUB_TOKEN']); + } else { + core.setFailed('โŒ๏ธ You have to provide a GITHUB_TOKEN or GITHUB_PAT'); + return; + } + gitURL.concat('@github.com/', repo, '.git'); + await exec.exec('git', [ + 'push', + '--force', + '--quiet', + gitURL, + `master:${target_branch}` + ]); + + process.chdir(process.env['GITHUB_WORKSPACE'] || '.'); + core.info( + `๐ŸŽ‰ Content of $INPUT_BUILD_DIR has been deployed to GitHub Pages.` + ); + } catch (error) { + core.setFailed(error.message); + } +} + +run(); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d0791ea --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "lib": [ + "es6" + ], + "newLine": "lf", + "outDir": "./lib", + "rootDir": "./src", + "strict": true, + "noImplicitAny": false, + "esModuleInterop": true + }, + "exclude": ["node_modules"] +}