From 52575ff03f1aebcd1911a8a086820bb4636f6f50 Mon Sep 17 00:00:00 2001 From: Stephanie Closson Date: Tue, 14 Apr 2020 15:05:18 -0600 Subject: [PATCH] Toolkit: Copy config files to dist for plugin use/Fix circleci build errors (#23575) * replaced run * consolidated dist and toolkit * Solved a few more issues 1. Need to explicitly copy circleci config to dist so that it's published 2. Detect build directory, and use "local" or "linked" mode for local builds. * Reverted change used only for testing * grafana-toolkit.js always required now. Copy to dist * removed grafana-toolkit.dist.js, no longer required * feedback from code review * Code review comments 2. --- .../bin/grafana-toolkit.dist.js | 3 -- .../grafana-toolkit/bin/grafana-toolkit.js | 42 ++++++++++++------- .../src/cli/tasks/toolkit.build.ts | 9 +++- 3 files changed, 34 insertions(+), 20 deletions(-) delete mode 100755 packages/grafana-toolkit/bin/grafana-toolkit.dist.js diff --git a/packages/grafana-toolkit/bin/grafana-toolkit.dist.js b/packages/grafana-toolkit/bin/grafana-toolkit.dist.js deleted file mode 100755 index 499bb40d812..00000000000 --- a/packages/grafana-toolkit/bin/grafana-toolkit.dist.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -require(`${__dirname}/grafana-toolkit.js`); diff --git a/packages/grafana-toolkit/bin/grafana-toolkit.js b/packages/grafana-toolkit/bin/grafana-toolkit.js index 1fbedf8ebbb..2cb78b0c5a1 100755 --- a/packages/grafana-toolkit/bin/grafana-toolkit.js +++ b/packages/grafana-toolkit/bin/grafana-toolkit.js @@ -5,26 +5,38 @@ const path = require('path'); let includeInternalScripts = false; +const isLinkedMode = () => { + // In circleci we are in linked mode. Detect by using the circle working directory, + // rather than the present working directory. + const pwd = process.env.CIRCLE_WORKING_DIRECTORY || process.env.PWD; + + if (path.basename(pwd) === 'grafana-toolkit') { + return true; + } + + try { + return fs.lstatSync(`${pwd}/node_modules/@grafana/toolkit`.replace('~', process.env.HOME)).isSymbolicLink(); + } catch { + return false; + } +}; + const entrypoint = () => { - const defaultEntryPoint = '../src/cli/index.js'; - const toolkitDirectory = `${process.env['PWD']}/node_modules/@grafana/toolkit`; + const defaultEntryPoint = `${__dirname}/../src/cli/index.js`; // IF we have a toolkit directory AND linked grafana toolkit AND the toolkit dir is a symbolic lik // THEN run everything in linked mode - if (fs.existsSync(toolkitDirectory)) { - const tkStat = fs.lstatSync(toolkitDirectory); - if (tkStat.isSymbolicLink()) { - console.log('Running in linked mode'); - // This bin is used for cli executed internally - var tsProjectPath = path.resolve(__dirname, '../tsconfig.json'); - require('ts-node').register({ - project: tsProjectPath, - transpileOnly: true, - }); + if (isLinkedMode()) { + console.log('Running in local/linked mode'); + // This bin is used for cli executed internally + var tsProjectPath = path.resolve(__dirname, '../tsconfig.json'); + require('ts-node').register({ + project: tsProjectPath, + transpileOnly: true, + }); - includeInternalScripts = true; - return '../src/cli/index.ts'; - } + includeInternalScripts = true; + return '../src/cli/index.ts'; } // We are using npx, and a relative path does not find index.js diff --git a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts index 10d6f7ad588..9d55213e21d 100644 --- a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts +++ b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts @@ -40,7 +40,7 @@ export const savePackage = useSpinner<{ const preparePackage = async (pkg: any) => { pkg.bin = { - 'grafana-toolkit': './bin/grafana-toolkit.dist.js', + 'grafana-toolkit': './bin/grafana-toolkit.js', }; await savePackage({ @@ -53,7 +53,8 @@ const copyFiles = () => { const files = [ 'README.md', 'CHANGELOG.md', - 'bin/grafana-toolkit.dist.js', + 'config/circleci/config.yml', + 'bin/grafana-toolkit.js', 'src/config/prettier.plugin.config.json', 'src/config/prettier.plugin.rc.js', 'src/config/tsconfig.plugin.json', @@ -66,6 +67,10 @@ const copyFiles = () => { return useSpinner(`Moving ${files.join(', ')} files`, async () => { const promises = files.map(file => { return new Promise((resolve, reject) => { + const basedir = path.dirname(`${distDir}/${file}`); + if (!fs.existsSync(basedir)) { + fs.mkdirSync(basedir, { recursive: true }); + } fs.copyFile(`${cwd}/${file}`, `${distDir}/${file}`, err => { if (err) { reject(err);