UNPKG

netlify-cli

Version:

Netlify command line tool

132 lines (108 loc) 3.52 kB
const path = require('path') const process = require('process') const { flags: flagsLib } = require('@oclif/command') const chalk = require('chalk') const Command = require('../utils/command') const { ensureNetlifyIgnore } = require('../utils/gitignore') const linkPrompt = require('../utils/link/link-by-prompt') const { track } = require('../utils/telemetry') class LinkCommand extends Command { async run() { await this.authenticate() const { flags } = this.parse(LinkCommand) const { api, site, state } = this.netlify const siteId = site.id await this.config.runHook('analytics', { eventName: 'command', payload: { command: 'link', }, }) let siteData try { siteData = await api.getSite({ siteId }) } catch (error) { // silent api error } // Add .netlify to .gitignore file await ensureNetlifyIgnore(site.root) // Site id is incorrect if (siteId && !siteData) { console.log(`"${siteId}" was not found in your Netlify account.`) console.log(`Please double check your siteID and which account you are logged into via \`netlify status\`.`) return this.exit() } // If already linked to site. exit and prompt for unlink if (siteData) { this.log(`Site already linked to "${siteData.name}"`) this.log(`Admin url: ${siteData.admin_url}`) this.log() this.log(`To unlink this site, run: ${chalk.cyanBright('netlify unlink')}`) return this.exit() } if (flags.id) { try { siteData = await api.getSite({ site_id: flags.id }) } catch (error) { if (error.status === 404) { this.error(new Error(`Site id ${flags.id} not found`)) } else { this.error(error) } } // Save site ID state.set('siteId', siteData.id) this.log(`Linked to ${siteData.name} in ${state.path}`) await track('sites_linked', { siteId: siteData.id, linkType: 'manual', kind: 'byId', }) return this.exit() } if (flags.name) { let results try { results = await api.listSites({ name: flags.name, filter: 'all', }) } catch (error) { if (error.status === 404) { this.error(new Error(`${flags.name} not found`)) } else { this.error(error) } } if (results.length === 0) { this.error(new Error(`No sites found named ${flags.name}`)) } const [firstSiteData] = results state.set('siteId', firstSiteData.id) this.log(`Linked to ${firstSiteData.name} in ${path.relative(path.join(process.cwd(), '..'), state.path)}`) await track('sites_linked', { siteId: (firstSiteData && firstSiteData.id) || siteId, linkType: 'manual', kind: 'byName', }) return this.exit() } siteData = await linkPrompt(this, flags) return siteData } } LinkCommand.description = `Link a local repo or project folder to an existing site on Netlify` LinkCommand.examples = ['netlify link', 'netlify link --id 123-123-123-123', 'netlify link --name my-site-name'] LinkCommand.flags = { id: flagsLib.string({ description: 'ID of site to link to', }), name: flagsLib.string({ description: 'Name of site to link to', }), gitRemoteName: flagsLib.string({ description: 'Name of Git remote to use. e.g. "origin"', }), ...LinkCommand.flags, } module.exports = LinkCommand