File Explorer

/proc/self/root/proc/1/task/1/root/node24/lib/node_modules/npm/lib/commands/trust

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

github.js3.0 KB · 105 lines
const Definition = require('@npmcli/config/lib/definitions/definition.js')const globalDefinitions = require('@npmcli/config/lib/definitions/definitions.js')const TrustCommand = require('../../trust-cmd.js')const path = require('node:path') class TrustGitHub extends TrustCommand {  static description = 'Create a trusted relationship between a package and GitHub Actions'  static name = 'github'  static positionals = 1 // expects at most 1 positional (package name)  static providerName = 'GitHub Actions'  static providerEntity = 'GitHub repository'  static providerFile = 'GitHub Actions Workflow'  static providerHostname = 'https://github.com'   // entity means project / repository  static entityKey = 'repository'   static usage = [    '[package] --file [--repo|--repository] [--env|--environment] [-y|--yes]',  ]   static definitions = [    new Definition('file', {      default: null,      type: String,      required: true,      description: 'Name of workflow file within a repositories .GitHub folder (must end in yaml, yml)',    }),    new Definition('repository', {      default: null,      type: String,      description: 'Name of the repository in the format owner/repo',      alias: ['repo'],    }),    new Definition('environment', {      default: null,      type: String,      description: 'CI environment name',      alias: ['env'],    }),    // globals are alphabetical    globalDefinitions['dry-run'],    globalDefinitions.json,    globalDefinitions.registry,    globalDefinitions.yes,  ]   getEntityUrl ({ providerHostname, file, entity }) {    if (file) {      return new URL(`${entity}/blob/HEAD/.github/workflows/${file}`, providerHostname).toString()    }    return new URL(entity, providerHostname).toString()  }   validateEntity (entity) {    if (entity.split('/').length !== 2) {      throw new Error(`${this.constructor.providerEntity} must be specified in the format owner/repository`)    }  }   validateFile (file) {    if (file !== path.basename(file)) {      throw new Error('GitHub Actions workflow must be just a file not a path')    }  }   static optionsToBody (options) {    const { file, repository, environment } = options    const trustConfig = {      type: 'github',      claims: {        repository,        workflow_ref: {          file,        },        ...(environment) && { environment },      },    }    return trustConfig  }   // Convert API response body to options  static bodyToOptions (body) {    const file = body.claims?.workflow_ref?.file    const repository = body.claims?.repository    const environment = body.claims?.environment    return {      ...(body.id) && { id: body.id },      ...(body.type) && { type: body.type },      ...(file) && { file },      ...(repository) && { repository },      ...(environment) && { environment },    }  }   async exec (positionalArgs, flags) {    await this.createConfigCommand({      positionalArgs,      flags,    })  }} module.exports = TrustGitHub