mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-04 13:29:12 +08:00 
			
		
		
		
	fixed conflicts
This commit is contained in:
		
							
								
								
									
										32
									
								
								.licenses/npm/@actions/http-client-2.0.1.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.licenses/npm/@actions/http-client-2.0.1.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: "@actions/http-client"
 | 
				
			||||||
 | 
					version: 2.0.1
 | 
				
			||||||
 | 
					type: npm
 | 
				
			||||||
 | 
					summary: Actions Http Client
 | 
				
			||||||
 | 
					homepage: https://github.com/actions/toolkit/tree/main/packages/http-client
 | 
				
			||||||
 | 
					license: mit
 | 
				
			||||||
 | 
					licenses:
 | 
				
			||||||
 | 
					- sources: LICENSE
 | 
				
			||||||
 | 
					  text: |
 | 
				
			||||||
 | 
					    Actions Http Client for Node.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Copyright (c) GitHub, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MIT License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
 | 
				
			||||||
 | 
					    associated documentation files (the "Software"), to deal in the Software without restriction,
 | 
				
			||||||
 | 
					    including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
				
			||||||
 | 
					    and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
 | 
				
			||||||
 | 
					    subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 | 
				
			||||||
 | 
					    LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
 | 
				
			||||||
 | 
					    NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | 
				
			||||||
 | 
					    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 | 
				
			||||||
 | 
					    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					notices: []
 | 
				
			||||||
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
									
									
									
									
								
							@@ -22,7 +22,7 @@ steps:
 | 
				
			|||||||
- uses: actions/checkout@v3
 | 
					- uses: actions/checkout@v3
 | 
				
			||||||
- uses: actions/setup-node@v3
 | 
					- uses: actions/setup-node@v3
 | 
				
			||||||
  with:
 | 
					  with:
 | 
				
			||||||
    node-version: 14
 | 
					    node-version: 16
 | 
				
			||||||
- run: npm ci
 | 
					- run: npm ci
 | 
				
			||||||
- run: npm test
 | 
					- run: npm test
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@@ -39,8 +39,8 @@ The `node-version` input supports the Semantic Versioning Specification, for mor
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Examples:
 | 
					Examples:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - Major versions: `12`, `14`, `16`
 | 
					 - Major versions: `14`, `16`, `18`
 | 
				
			||||||
 - More specific versions: `10.15`, `14.2.0`, `16.3.0`
 | 
					 - More specific versions: `10.15`, `16.15.1` , `18.4.0`
 | 
				
			||||||
 - NVM LTS syntax: `lts/erbium`, `lts/fermium`, `lts/*`, `lts/-n`
 | 
					 - NVM LTS syntax: `lts/erbium`, `lts/fermium`, `lts/*`, `lts/-n`
 | 
				
			||||||
 - Latest release: `*` or `latest`/`current`/`node`
 | 
					 - Latest release: `*` or `latest`/`current`/`node`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,7 +58,7 @@ It's **always** recommended to commit the lockfile of your package manager for s
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under the hood for caching global packages data but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+). The `cache` input is optional, and caching is turned off by default.
 | 
					The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under the hood for caching global packages data but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+). The `cache` input is optional, and caching is turned off by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The action defaults to search for the dependency file (`package-lock.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
 | 
					The action defaults to search for the dependency file (`package-lock.json`, `npm-shrinkwrap.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Note:** The action does not cache `node_modules`
 | 
					**Note:** The action does not cache `node_modules`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,7 +71,7 @@ steps:
 | 
				
			|||||||
- uses: actions/checkout@v3
 | 
					- uses: actions/checkout@v3
 | 
				
			||||||
- uses: actions/setup-node@v3
 | 
					- uses: actions/setup-node@v3
 | 
				
			||||||
  with:
 | 
					  with:
 | 
				
			||||||
    node-version: 14
 | 
					    node-version: 16
 | 
				
			||||||
    cache: 'npm'
 | 
					    cache: 'npm'
 | 
				
			||||||
- run: npm ci
 | 
					- run: npm ci
 | 
				
			||||||
- run: npm test
 | 
					- run: npm test
 | 
				
			||||||
@@ -84,7 +84,7 @@ steps:
 | 
				
			|||||||
- uses: actions/checkout@v3
 | 
					- uses: actions/checkout@v3
 | 
				
			||||||
- uses: actions/setup-node@v3
 | 
					- uses: actions/setup-node@v3
 | 
				
			||||||
  with:
 | 
					  with:
 | 
				
			||||||
    node-version: 14
 | 
					    node-version: 16
 | 
				
			||||||
    cache: 'npm'
 | 
					    cache: 'npm'
 | 
				
			||||||
    cache-dependency-path: subdir/package-lock.json
 | 
					    cache-dependency-path: subdir/package-lock.json
 | 
				
			||||||
- run: npm ci
 | 
					- run: npm ci
 | 
				
			||||||
@@ -99,7 +99,7 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        node: [ 12, 14, 16 ]
 | 
					        node: [ 14, 16, 18 ]
 | 
				
			||||||
    name: Node ${{ matrix.node }} sample
 | 
					    name: Node ${{ matrix.node }} sample
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v3
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import * as core from '@actions/core';
 | 
					import * as core from '@actions/core';
 | 
				
			||||||
import * as io from '@actions/io';
 | 
					import * as io from '@actions/io';
 | 
				
			||||||
import * as tc from '@actions/tool-cache';
 | 
					import * as tc from '@actions/tool-cache';
 | 
				
			||||||
 | 
					import * as exec from '@actions/exec';
 | 
				
			||||||
import * as im from '../src/installer';
 | 
					import * as im from '../src/installer';
 | 
				
			||||||
import * as cache from '@actions/cache';
 | 
					import * as cache from '@actions/cache';
 | 
				
			||||||
import fs from 'fs';
 | 
					import fs from 'fs';
 | 
				
			||||||
@@ -38,6 +39,7 @@ describe('setup-node', () => {
 | 
				
			|||||||
  let authSpy: jest.SpyInstance;
 | 
					  let authSpy: jest.SpyInstance;
 | 
				
			||||||
  let parseNodeVersionSpy: jest.SpyInstance;
 | 
					  let parseNodeVersionSpy: jest.SpyInstance;
 | 
				
			||||||
  let isCacheActionAvailable: jest.SpyInstance;
 | 
					  let isCacheActionAvailable: jest.SpyInstance;
 | 
				
			||||||
 | 
					  let getExecOutputSpy: jest.SpyInstance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  beforeEach(() => {
 | 
					  beforeEach(() => {
 | 
				
			||||||
    // @actions/core
 | 
					    // @actions/core
 | 
				
			||||||
@@ -103,6 +105,10 @@ describe('setup-node', () => {
 | 
				
			|||||||
      // uncomment to debug
 | 
					      // uncomment to debug
 | 
				
			||||||
      // process.stderr.write('log:' + line + '\n');
 | 
					      // process.stderr.write('log:' + line + '\n');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // @actions/exec
 | 
				
			||||||
 | 
					    getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
 | 
				
			||||||
 | 
					    getExecOutputSpy.mockImplementation(() => 'v16.15.0');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  afterEach(() => {
 | 
					  afterEach(() => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,8 @@ inputs:
 | 
				
			|||||||
outputs:
 | 
					outputs:
 | 
				
			||||||
  cache-hit: 
 | 
					  cache-hit: 
 | 
				
			||||||
    description: 'A boolean value to indicate if a cache was hit.'
 | 
					    description: 'A boolean value to indicate if a cache was hit.'
 | 
				
			||||||
 | 
					  node-version:
 | 
				
			||||||
 | 
					    description: 'The installed node version.'
 | 
				
			||||||
runs:
 | 
					runs:
 | 
				
			||||||
  using: 'node16'
 | 
					  using: 'node16'
 | 
				
			||||||
  main: 'dist/setup/index.js'
 | 
					  main: 'dist/setup/index.js'
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							@@ -59926,7 +59926,7 @@ const exec = __importStar(__nccwpck_require__(1514));
 | 
				
			|||||||
const cache = __importStar(__nccwpck_require__(7799));
 | 
					const cache = __importStar(__nccwpck_require__(7799));
 | 
				
			||||||
exports.supportedPackageManagers = {
 | 
					exports.supportedPackageManagers = {
 | 
				
			||||||
    npm: {
 | 
					    npm: {
 | 
				
			||||||
        lockFilePatterns: ['package-lock.json', 'yarn.lock'],
 | 
					        lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
 | 
				
			||||||
        getCacheFolderCommand: 'npm config get cache'
 | 
					        getCacheFolderCommand: 'npm config get cache'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    pnpm: {
 | 
					    pnpm: {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							@@ -71882,7 +71882,7 @@ const exec = __importStar(__nccwpck_require__(1514));
 | 
				
			|||||||
const cache = __importStar(__nccwpck_require__(7799));
 | 
					const cache = __importStar(__nccwpck_require__(7799));
 | 
				
			||||||
exports.supportedPackageManagers = {
 | 
					exports.supportedPackageManagers = {
 | 
				
			||||||
    npm: {
 | 
					    npm: {
 | 
				
			||||||
        lockFilePatterns: ['package-lock.json', 'yarn.lock'],
 | 
					        lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
 | 
				
			||||||
        getCacheFolderCommand: 'npm config get cache'
 | 
					        getCacheFolderCommand: 'npm config get cache'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    pnpm: {
 | 
					    pnpm: {
 | 
				
			||||||
@@ -72418,6 +72418,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
 | 
					Object.defineProperty(exports, "__esModule", ({ value: true }));
 | 
				
			||||||
const core = __importStar(__nccwpck_require__(2186));
 | 
					const core = __importStar(__nccwpck_require__(2186));
 | 
				
			||||||
 | 
					const exec = __importStar(__nccwpck_require__(1514));
 | 
				
			||||||
const installer = __importStar(__nccwpck_require__(2574));
 | 
					const installer = __importStar(__nccwpck_require__(2574));
 | 
				
			||||||
const fs_1 = __importDefault(__nccwpck_require__(7147));
 | 
					const fs_1 = __importDefault(__nccwpck_require__(7147));
 | 
				
			||||||
const auth = __importStar(__nccwpck_require__(7573));
 | 
					const auth = __importStar(__nccwpck_require__(7573));
 | 
				
			||||||
@@ -72450,6 +72451,9 @@ function run() {
 | 
				
			|||||||
                const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
 | 
					                const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
 | 
				
			||||||
                yield installer.getNode(version, stable, checkLatest, auth, arch);
 | 
					                yield installer.getNode(version, stable, checkLatest, auth, arch);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            // Output version of node is being used
 | 
				
			||||||
 | 
					            const { stdout: installedVersion } = yield exec.getExecOutput('node', ['--version'], { ignoreReturnCode: true });
 | 
				
			||||||
 | 
					            core.setOutput('node-version', installedVersion);
 | 
				
			||||||
            const registryUrl = core.getInput('registry-url');
 | 
					            const registryUrl = core.getInput('registry-url');
 | 
				
			||||||
            const alwaysAuth = core.getInput('always-auth');
 | 
					            const alwaysAuth = core.getInput('always-auth');
 | 
				
			||||||
            if (registryUrl) {
 | 
					            if (registryUrl) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -247,3 +247,5 @@ steps:
 | 
				
			|||||||
# `npm rebuild` will run all those post-install scripts for us.
 | 
					# `npm rebuild` will run all those post-install scripts for us.
 | 
				
			||||||
- run: npm rebuild && npm run prepare --if-present
 | 
					- run: npm rebuild && npm run prepare --if-present
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: As per https://github.com/actions/setup-node/issues/49 you cannot use `secrets.GITHUB_TOKEN` to access private GitHub Packages within the same organisation but in a different repository.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -56,6 +56,14 @@
 | 
				
			|||||||
        "minimatch": "^3.0.4"
 | 
					        "minimatch": "^3.0.4"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@actions/cache/node_modules/@actions/http-client": {
 | 
				
			||||||
 | 
					      "version": "2.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "tunnel": "^0.0.6"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/@actions/cache/node_modules/uuid": {
 | 
					    "node_modules/@actions/cache/node_modules/uuid": {
 | 
				
			||||||
      "version": "3.4.0",
 | 
					      "version": "3.4.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
				
			||||||
@@ -5119,6 +5127,14 @@
 | 
				
			|||||||
            "minimatch": "^3.0.4"
 | 
					            "minimatch": "^3.0.4"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "@actions/http-client": {
 | 
				
			||||||
 | 
					          "version": "2.0.1",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
 | 
				
			||||||
 | 
					          "requires": {
 | 
				
			||||||
 | 
					            "tunnel": "^0.0.6"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "uuid": {
 | 
					        "uuid": {
 | 
				
			||||||
          "version": "3.4.0",
 | 
					          "version": "3.4.0",
 | 
				
			||||||
          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
					          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
    "build": "ncc build -o dist/setup src/setup-node.ts && ncc build -o dist/cache-save src/cache-save.ts",
 | 
					    "build": "ncc build -o dist/setup src/setup-node.ts && ncc build -o dist/cache-save src/cache-save.ts",
 | 
				
			||||||
    "format": "prettier --write **/*.ts",
 | 
					    "format": "prettier --write **/*.ts",
 | 
				
			||||||
    "format-check": "prettier --check **/*.ts",
 | 
					    "format-check": "prettier --check **/*.ts",
 | 
				
			||||||
    "test": "jest",
 | 
					    "test": "jest --coverage",
 | 
				
			||||||
    "pre-checkin": "npm run format && npm run build && npm test"
 | 
					    "pre-checkin": "npm run format && npm run build && npm test"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export interface PackageManagerInfo {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const supportedPackageManagers: SupportedPackageManagers = {
 | 
					export const supportedPackageManagers: SupportedPackageManagers = {
 | 
				
			||||||
  npm: {
 | 
					  npm: {
 | 
				
			||||||
    lockFilePatterns: ['package-lock.json', 'yarn.lock'],
 | 
					    lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
 | 
				
			||||||
    getCacheFolderCommand: 'npm config get cache'
 | 
					    getCacheFolderCommand: 'npm config get cache'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  pnpm: {
 | 
					  pnpm: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
import * as core from '@actions/core';
 | 
					import * as core from '@actions/core';
 | 
				
			||||||
 | 
					import * as exec from '@actions/exec';
 | 
				
			||||||
import * as installer from './installer';
 | 
					import * as installer from './installer';
 | 
				
			||||||
import fs from 'fs';
 | 
					import fs from 'fs';
 | 
				
			||||||
import * as auth from './authutil';
 | 
					import * as auth from './authutil';
 | 
				
			||||||
@@ -39,6 +40,14 @@ export async function run() {
 | 
				
			|||||||
      await installer.getNode(version, stable, checkLatest, auth, arch);
 | 
					      await installer.getNode(version, stable, checkLatest, auth, arch);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Output version of node is being used
 | 
				
			||||||
 | 
					    const {stdout: installedVersion} = await exec.getExecOutput(
 | 
				
			||||||
 | 
					      'node',
 | 
				
			||||||
 | 
					      ['--version'],
 | 
				
			||||||
 | 
					      {ignoreReturnCode: true}
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    core.setOutput('node-version', installedVersion);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const registryUrl: string = core.getInput('registry-url');
 | 
					    const registryUrl: string = core.getInput('registry-url');
 | 
				
			||||||
    const alwaysAuth: string = core.getInput('always-auth');
 | 
					    const alwaysAuth: string = core.getInput('always-auth');
 | 
				
			||||||
    if (registryUrl) {
 | 
					    if (registryUrl) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user