angular-cli-ghpages
Advanced tools
Comparing version
"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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -11,3 +12,4 @@ }); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
function deploy(engine, context, projectRoot, options) { | ||
const architect_1 = require("@angular-devkit/architect"); | ||
function deploy(engine, context, buildTarget, options) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
@@ -21,12 +23,6 @@ if (options.noBuild) { | ||
} | ||
const configuration = options.configuration | ||
? options.configuration | ||
: 'production'; | ||
const overrides = Object.assign({}, (options.baseHref && { baseHref: options.baseHref })); | ||
context.logger.info(`π¦ Building "${context.target.project}". Configuration: "${configuration}".${options.baseHref ? ' Your base-href: "' + options.baseHref + '"' : ''}`); | ||
const build = yield context.scheduleTarget({ | ||
target: 'build', | ||
project: context.target.project, | ||
configuration | ||
}, overrides); | ||
context.logger.info(`π¦ Building "${context.target.project}"`); | ||
context.logger.info(`π¦ Build target "${buildTarget.name}"`); | ||
const build = yield context.scheduleTarget(architect_1.targetFromTargetString(buildTarget.name), Object.assign(Object.assign({}, buildTarget.options), overrides)); | ||
const buildResult = yield build.result; | ||
@@ -37,3 +33,7 @@ if (!buildResult.success) { | ||
} | ||
yield engine.run(projectRoot, options, context.logger); | ||
const buildOptions = yield context.getTargetOptions(architect_1.targetFromTargetString(buildTarget.name)); | ||
if (!buildOptions.outputPath || typeof buildOptions.outputPath !== 'string') { | ||
throw new Error(`Cannot read the output path option of the Angular project '${buildTarget.name}' in angular.json`); | ||
} | ||
yield engine.run(buildOptions.outputPath, options, context.logger); | ||
}); | ||
@@ -40,0 +40,0 @@ } |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -13,39 +33,15 @@ }); | ||
}; | ||
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 architect_1 = require("@angular-devkit/architect"); | ||
const core_1 = require("@angular-devkit/core"); | ||
const node_1 = require("@angular-devkit/core/node"); | ||
const os_1 = __importDefault(require("os")); | ||
const path = __importStar(require("path")); | ||
const engine = __importStar(require("../engine/engine")); | ||
const actions_1 = __importDefault(require("./actions")); | ||
exports.default = architect_1.createBuilder((options, context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = architect_1.createBuilder((options, context) => __awaiter(void 0, void 0, void 0, function* () { | ||
if (!context.target) { | ||
throw new Error('Cannot deploy the application without a target'); | ||
} | ||
const buildTarget = { | ||
name: options.buildTarget || `${context.target.project}:build:production` | ||
}; | ||
try { | ||
const root = core_1.normalize(context.workspaceRoot); | ||
const workspace = new core_1.experimental.workspace.Workspace(root, new node_1.NodeJsSyncHost()); | ||
yield workspace | ||
.loadWorkspaceFromHost(core_1.normalize('angular.json')) | ||
.toPromise(); | ||
if (!context.target) { | ||
throw new Error('Cannot deploy the application without a target'); | ||
} | ||
const targets = workspace.getProjectTargets(context.target.project); | ||
if (!targets || | ||
!targets.build || | ||
!targets.build.options || | ||
!targets.build.options.outputPath) { | ||
throw new Error('Cannot find the project output directory'); | ||
} | ||
const isWin = os_1.default.platform() === 'win32'; | ||
const workspaceRoot = !isWin | ||
? workspace.root | ||
: core_1.asWindowsPath(workspace.root); | ||
yield actions_1.default(engine, context, path.join(workspaceRoot, targets.build.options.outputPath), options); | ||
yield actions_1.default(engine, context, buildTarget, options); | ||
} | ||
@@ -52,0 +48,0 @@ catch (e) { |
@@ -10,7 +10,5 @@ { | ||
}, | ||
"configuration": { | ||
"buildTarget": { | ||
"type": "string", | ||
"default": "production", | ||
"description": "A named build target, as specified in the `configurations` section of angular.json. Each named target is accompanied by a configuration of option defaults for that target. Same as `ng build --configuration=XXX`.", | ||
"alias": "c" | ||
"description": "A named build target, as specified in the `configurations` section of angular.json . Each named target is accompanied by a configuration of option defaults for that target. This is equivalent as calling the command `ng build --configuration=XXX`." | ||
}, | ||
@@ -17,0 +15,0 @@ "noBuild": { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.defaults = void 0; | ||
exports.defaults = { | ||
@@ -4,0 +5,0 @@ dir: 'dist', |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
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; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
@@ -21,2 +34,3 @@ return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.prepareOptions = exports.run = void 0; | ||
const fse = __importStar(require("fs-extra")); | ||
@@ -40,3 +54,3 @@ const path = __importStar(require("path")); | ||
yield publishViaGhPages(ghpages, dir, options, logger); | ||
logger.info('π Successfully published via angular-cli-ghpages! Have a nice day!'); | ||
logger.info('π Successfully published via angular-cli-ghpages! Have a nice day!'); | ||
}); | ||
@@ -47,3 +61,3 @@ } | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const options = Object.assign({}, defaults_1.defaults, origOptions); | ||
const options = Object.assign(Object.assign({}, defaults_1.defaults), origOptions); | ||
if (origOptions.noSilent) { | ||
@@ -108,3 +122,2 @@ options.silent = !origOptions.noSilent; | ||
process.env.GITHUB_REPOSITORY + | ||
'/' + | ||
'/commit/' + | ||
@@ -199,3 +212,3 @@ process.env.GITHUB_SHA; | ||
} | ||
logger.info('π¨βπ Uploading via git, please wait...'); | ||
logger.info('π Uploading via git, please wait...'); | ||
return new Promise((resolve, reject) => { | ||
@@ -202,0 +215,0 @@ ghPages.publish(dir, options, error => { |
15
index.js
"use strict"; | ||
function __export(m) { | ||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; | ||
} | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
__export(require("./public_api")); | ||
__exportStar(require("./public_api"), exports); | ||
//# sourceMappingURL=index.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ngAdd = void 0; | ||
const core_1 = require("@angular-devkit/core"); | ||
@@ -4,0 +5,0 @@ const schematics_1 = require("@angular-devkit/schematics"); |
{ | ||
"name": "angular-cli-ghpages", | ||
"version": "0.6.2", | ||
"description": "Deploy your Angular app to GitHub pages directly from the Angular CLI.", | ||
"version": "1.0.0-rc.1", | ||
"description": "Deploy your Angular app to GitHub pages directly from the Angular CLI. (ng deploy)", | ||
"main": "index.js", | ||
@@ -12,3 +12,4 @@ "bin": { | ||
"build": "rimraf dist && json2ts deploy/schema.json > deploy/schema.d.ts && tsc && copyfiles builders.json collection.json ng-add-schema.json package.json angular-cli-ghpages deploy/schema.json dist && copyfiles ../README.md dist/README.md", | ||
"test": "jest" | ||
"test": "jest", | ||
"prettier": "prettier --write ." | ||
}, | ||
@@ -53,27 +54,27 @@ "schematics": "./collection.json", | ||
"devDependencies": { | ||
"@angular-devkit/architect": "^0.803.0", | ||
"@angular-devkit/core": "^8.3.0", | ||
"@angular-devkit/schematics": "^8.3.0", | ||
"@types/fs-extra": "^8.0.0", | ||
"@types/jest": "^24.0.18", | ||
"@types/node": "^12.6.9", | ||
"copyfiles": "^2.1.1", | ||
"husky": "^3.0.7", | ||
"jest": "^24.8.0", | ||
"json-schema-to-typescript": "^7.0.0", | ||
"prettier": "1.18.2", | ||
"pretty-quick": "^1.11.1", | ||
"rimraf": "^2.6.3", | ||
"ts-jest": "^24.0.2", | ||
"typescript": "^3.5.3" | ||
"@angular-devkit/architect": ">= 0.900 < 0.1200", | ||
"@angular-devkit/core": "^9.0.0 || ^10.0.0 || ^11.0.0", | ||
"@angular-devkit/schematics": "^9.0.0 || ^10.0.0 || ^11.0.0", | ||
"@types/fs-extra": "^9.0.4", | ||
"@types/jest": "^26.0.15", | ||
"@types/node": "^14.14.7", | ||
"copyfiles": "^2.4.0", | ||
"husky": "^4.3.0", | ||
"jest": "^26.6.3", | ||
"json-schema-to-typescript": "^9.1.1", | ||
"prettier": "2.1.2", | ||
"pretty-quick": "^3.1.0", | ||
"rimraf": "^3.0.2", | ||
"ts-jest": "^26.4.4", | ||
"typescript": ">=4.0.0 <4.1.0" | ||
}, | ||
"peerDependencies": { | ||
"@angular-devkit/architect": ">=0.800.0", | ||
"@angular-devkit/core": ">=8.0.0", | ||
"@angular-devkit/schematics": ">=8.0.0" | ||
"@angular-devkit/architect": ">= 0.900 < 0.1200", | ||
"@angular-devkit/core": "^9.0.0 || ^10.0.0 || ^11.0.0", | ||
"@angular-devkit/schematics": "^9.0.0 || ^10.0.0 || ^11.0.0" | ||
}, | ||
"dependencies": { | ||
"commander": "^3.0.0-0", | ||
"fs-extra": "^8.1.0", | ||
"gh-pages": "^2.1.0" | ||
"fs-extra": "^9.0.1", | ||
"gh-pages": "^3.1.0" | ||
}, | ||
@@ -97,4 +98,8 @@ "husky": { | ||
"node" | ||
], | ||
"testPathIgnorePatterns": [ | ||
"/node_modules/", | ||
"/dist/" | ||
] | ||
} | ||
} |
"use strict"; | ||
function __export(m) { | ||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; | ||
} | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
__export(require("./ng-add")); | ||
__export(require("./deploy/actions")); | ||
__export(require("./deploy/builder")); | ||
__exportStar(require("./ng-add"), exports); | ||
__exportStar(require("./deploy/actions"), exports); | ||
__exportStar(require("./deploy/builder"), exports); | ||
//# sourceMappingURL=public_api.js.map |
106
README.md
@@ -19,3 +19,3 @@ # angular-cli-ghpages | ||
- [--base-href](#base-href) | ||
- [--configuration](#configuration) | ||
- [--build-target](#build-target) | ||
- [--no-build](#no-build) | ||
@@ -40,6 +40,32 @@ - [--repo](#repo) | ||
The latest version comes with enhanced error handling and a progress report: | ||
**β οΈ BREAKING CHANGE (v1)** | ||
 | ||
Starting with version 1 the option `--configuration` was renamed to `--build-target`. | ||
BEFORE (_does not work_): | ||
``` | ||
ng deploy --configuration=test | ||
``` | ||
NOW: | ||
``` | ||
ng deploy --build-target=test | ||
``` | ||
If you use the old syntax, you will probably receive the following error: | ||
> An unhandled exception occurred: Configuration 'test' is not set in the workspace. | ||
<br> | ||
**π GitHub Actions** is now a first citizen alongside Travis CI and CircleCi. The token `GITHUB_TOKEN` is now supported. Learn everything you need to know in the following article. | ||
[](https://angular.schule/blog/2020-01-everything-github) | ||
**Everything GitHub: Continuous Integration, Deployment and Hosting for your Angular App** | ||
In this article we show several tools from the GitHub universe to launch a website with Angular. We will establish a professional pipeline, including version management, continuous deployment and web hosting. Best of all, for public repositories, this will not cost you a single cent! [Read more...](https://angular.schule/blog/2020-01-everything-github) | ||
## β οΈ Prerequisites <a name="prerequisites"></a> | ||
@@ -50,3 +76,3 @@ | ||
- Git 1.9 or higher (execute `git --version` to check your version) | ||
- Angular project created via [Angular CLI](https://github.com/angular/angular-cli) v8.3.0 or greater (execute `ng update @angular/cli @angular/core` to upgrade your project if necessary) | ||
- Angular project created via [Angular CLI](https://github.com/angular/angular-cli) v9.0.0 or greater (execute `ng update` to upgrade your project if necessary) | ||
- older Angular projects can still use the standalone program. See the documentation at [README_standalone](https://github.com/angular-schule/angular-cli-ghpages/blob/master/docs/README_standalone.md). | ||
@@ -59,3 +85,3 @@ | ||
1. Install the latest version of the Angular CLI (v8.3.0 or greater) globally | ||
1. Install the latest version of the Angular CLI globally | ||
and create a new Angular project. | ||
@@ -93,3 +119,3 @@ | ||
```sh | ||
ng deploy | ||
ng deploy --base-href=/<repositoryname>/ | ||
``` | ||
@@ -100,5 +126,7 @@ | ||
```sh | ||
ng deploy your-angular-project | ||
ng deploy your-angular-project --base-href=/<repositoryname>/ | ||
``` | ||
Please be aware of the `--base-href` option. It is necessary when your project will be deployed to a non-root folder. See more details below. | ||
5. Your project should be available at `https://<username>.github.io/<repositoryname>`. | ||
@@ -130,5 +158,11 @@ Learn more about GitHub pages on the [official website](https://pages.github.com/). | ||
> **β οΈImportant** | ||
> | ||
> Please **do not disable the silent mode** if you use tokens, otherwise people could read them in the output logs. | ||
> If you are sure that your CI/CD provider does not display secrets on the console (this applies to CircleCI / Travis CI and Github Actions), you are welcome to disable silent mode. | ||
> **βΉοΈ Note for GitHub Actions** | ||
> | ||
> The `GITHUB_TOKEN` (installation access token) will only trigger a release of a new website if the action runs in a private repository. In a public repo, a commit is generated, but the site does not change. See this [GitHub Community post](https://github.community/t5/GitHub-Actions/Github-action-not-triggering-gh-pages-upon-push/m-p/26869) for more info. If your repo is public, you must still use the `GH_TOKEN` (personal access token). | ||
## π¦ Options <a name="options"></a> | ||
@@ -170,16 +204,33 @@ | ||
#### --configuration <a name="configuration"></a> | ||
#### --build-target <a name="build-target"></a> | ||
- **optional** | ||
- Alias: `-c` | ||
- Default: `production` (string) | ||
- Default: `undefined` (string) | ||
- Example: | ||
- `ng deploy` β Angular project is build in production mode | ||
- `ng deploy --configuration=test` β Angular project is using the configuration `test` (this configuration must exist in the `angular.json` file) | ||
- `ng deploy` β Angular project is build in `production` mode | ||
- `ng deploy --build-target=test` β Angular project is using the build configuration `test` (this configuration must exist in the `angular.json` file) | ||
A named build target, as specified in the `configurations` section of `angular.json`. | ||
Each named target is accompanied by a configuration of option defaults for that target. | ||
Same as `ng build --configuration=XXX`. | ||
This command has no effect if the option `--no-build` option is active. | ||
If no buildTarget is set, the `production` build of the default project will be chosen. | ||
The `buildTarget` simply points to an existing build configuration for your project, as specified in the `configurations` section of `angular.json`. | ||
Most projects have a default configuration and a production configuration (commonly activated by using the `--prod` flag) but it is possible to specify as many build configurations as needed. | ||
This is equivalent as calling the command `ng build --configuration=XXX`." | ||
This command has no effect if the option `--no-build` is active. | ||
**β οΈ BREAKING CHANGE (v1)** | ||
This option was called `--configuration` in previous versions. | ||
BEFORE (_does not work_): | ||
``` | ||
ng deploy --configuration=test | ||
``` | ||
NOW: | ||
``` | ||
ng deploy --build-target=test | ||
``` | ||
#### --no-build <a name="no-build"></a> | ||
@@ -210,3 +261,5 @@ | ||
> **βΉοΈ Hint:** Set an environment variable with the name `GH_TOKEN` / `PERSONAL_TOKEN` or `GITHUB_TOKEN` and it will be automatically added to the URL, if it uses the HTTPS shema (it must start with `https://github.com`). | ||
> **βΉοΈ Hint** | ||
> | ||
> Set an environment variable with the name `GH_TOKEN` / `PERSONAL_TOKEN` or `GITHUB_TOKEN` and it will be automatically added to the URL, if it uses the HTTPS shema (it must start with `https://github.com`). | ||
> Tokens are generally not supported for Git over SSH (starts with `git@github.com`). | ||
@@ -262,3 +315,5 @@ | ||
> **β οΈ WARNING:** This option should be kept as it is if the repository URL or other information passed to Git commands is sensitive and should not be logged (== you have a public build server and you are using the token feature). | ||
> **β οΈ WARNING** | ||
> | ||
> This option should be kept as it is if the repository URL or other information passed to Git commands is sensitive and should not be logged (== you have a public build server and you are using the token feature). | ||
> By default the silent mode is enabled to avoid sensitive data exposure. | ||
@@ -310,3 +365,3 @@ | ||
- baseHref | ||
- configuration | ||
- buildTarget | ||
- noBuild | ||
@@ -344,5 +399,8 @@ - repo | ||
And just run `ng deploy` π. | ||
Now you can just run `ng deploy` without all the options in the command line! π | ||
> **βΉοΈ Hint:** You can always use the [--dry-run](#dry-run) option to verify if your configuration is right. | ||
> **βΉοΈ Hint** | ||
> | ||
> You can always use the [--dry-run](#dry-run) option to verify if your configuration is right. | ||
> The project will build but not deploy. | ||
@@ -355,4 +413,4 @@ ## π Environments <a name="environments"></a> | ||
1. [GitHub Actions](https://github.com/angular-schule/angular-cli-ghpages/blob/master/docs/README_environment_github_actions.md) by [Dharmen Shah](https://github.com/shhdharmen) | ||
2. TODO: Travis CI | ||
3. TODO: CircleCI | ||
2. Travis CI | ||
3. CircleCI | ||
@@ -374,3 +432,3 @@ ## βοΈ FAQ <a name="faq"></a> | ||
### © 2019 https://angular.schule | ||
### © 2017-2020 https://angular.schule | ||
@@ -377,0 +435,0 @@ This project is made on top of [tschaub/gh-pages](https://github.com/tschaub/gh-pages). |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
108725
65.41%29
26.09%890
83.13%426
15.76%30
25%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated