Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

environment set to undefinded in config/environment.js when running ember deploy #474

Open
loqtor opened this issue Jun 27, 2017 · 10 comments

Comments

@loqtor
Copy link

loqtor commented Jun 27, 2017

Hi guys,

I'm not sure if this issue should be raised here (or even if it isn't something I am doing wrong), but I'd rather share what's going on.

Basically, when running ember deploy [deployment_target] there are two things that called my attention:

1 - It seems to go through config/environment.js several times.
2 - The first time it runs environment is undefined.

This causes the configuration for endpoints to be the default one for any deployment_target
, making my application in other environment than develop not to work properly.

I'm currently deploying to S3 using ember-cli-deploy-s3.

Am I missing something here? Please, bear in mind this is the first time I'm using the addon, so let me know in case I'm way off here. :)

Here's my package.json:

{
  "name": "branz-artizan-web",
  "version": "0.0.4",
  "description": "branz-artizan-web web application",
  "license": "MIT",
  "author": "",
  "directories": {
    "doc": "doc",
    "test": "tests"
  },
  "repository": "",
  "scripts": {
    "postinstall": "bower install",
    "build": "ember build",
    "start": "ember server",
    "test": "ember test",
    "lint": "eslint app/ tests/",
    "lint:fix": "eslint --fix app/ tests"
  },
  "devDependencies": {
    "babel-plugin-transform-builtin-extend": "^1.1.2",
    "broccoli-asset-rev": "^2.4.5",
    "ember-awesome-macros": "^0.35.0",
    "ember-cli": "2.13.0",
    "ember-cli-app-version": "^3.0.0",
    "ember-cli-autoprefixer": "^0.7.0",
    "ember-cli-babel": "^6.0.0",
    "ember-cli-dependency-checker": "^1.3.0",
    "ember-cli-deploy": "^1.0.0",
    "ember-cli-deploy-build": "^1.1.0",
    "ember-cli-deploy-display-revisions": "^1.0.0",
    "ember-cli-deploy-git-tag": "^0.2.1",
    "ember-cli-deploy-gzip": "^1.0.0",
    "ember-cli-deploy-manifest": "^1.0.0",
    "ember-cli-deploy-revision-data": "^1.0.0",
    "ember-cli-deploy-s3": "^1.1.0",
    "ember-cli-deploy-s3-index": "^1.0.0",
    "ember-cli-document-title": "^0.3.3",
    "ember-cli-eslint": "^4.0.0",
    "ember-cli-htmlbars": "^1.1.1",
    "ember-cli-htmlbars-inline-precompile": "^0.4.0",
    "ember-cli-inject-live-reload": "^1.4.1",
    "ember-cli-mirage": "^0.3.3",
    "ember-cli-moment-shim": "^3.1.0",
    "ember-cli-qunit": "^4.0.0-beta.1",
    "ember-cli-sass": "^6.1.3",
    "ember-cli-shims": "^1.1.0",
    "ember-cli-uglify": "^1.2.0",
    "ember-concurrency": "^0.8.6",
    "ember-concurrency-test-waiter": "^0.2.0",
    "ember-cp-validations": "^3.3.1",
    "ember-data": "2.12.2",
    "ember-do-forms": "^1.8.1",
    "ember-drag-drop": "^0.4.4",
    "ember-export-application-global": "^2.0.0",
    "ember-file-upload": "^2.0.0-beta.41",
    "ember-get-config": "^0.2.1",
    "ember-href-to": "^1.12.0",
    "ember-load-initializers": "^1.0.0",
    "ember-lodash": "^4.17.2",
    "ember-macro-helpers": "^0.14.4",
    "ember-moment": "^7.3.0",
    "ember-native-dom-helpers": "^0.4.1",
    "ember-one-way-controls": "^2.0.0",
    "ember-resolver": "^4.0.0",
    "ember-route-action-helper": "^2.0.3",
    "ember-source": "~2.13.0",
    "ember-test-selectors": "^0.3.4",
    "ember-truth-helpers": "^1.3.0",
    "eslint": "^4.1.1",
    "eslint-plugin-ember-suave": "^1.0.0",
    "loader.js": "^4.2.3"
  },
  "engines": {
    "node": ">= 4"
  },
  "private": true,
  "dependencies": {
    "ember-storage": "^1.1.2",
    "ember-transition-helper": "^0.0.6"
  }
}

Here's my environment.js (note the early return at the beginning):

/* eslint-env node */
let path       = require('path');
let getRepoInfo = require('git-repo-info');

let awsRegion = 'REGION'; // default global region.

const DEFAULT_ENDPOINT = 'https://some-url.com';
const DEMO_ENDPOINT = 'https://some-other-url.com';
const DEFAULT_STAGE = 'dev';
const DEMO_STAGE = 'demo';

/*
 * TODO: Update this when the production environments are created
 */
const ENDPOINTS = {
  develop: DEFAULT_ENDPOINT,
  demo: DEMO_ENDPOINT,
  test: DEFAULT_ENDPOINT,
  production: DEMO_ENDPOINT,
  // production: DEFAULT_ENDPOINT,
};

const STAGES = {
  develop: DEFAULT_STAGE,
  demo: DEMO_STAGE,
  test: DEFAULT_STAGE,
  production: DEMO_STAGE,
  // production: DEFAULT_STAGE
};

module.exports = function(environment) {
  let deployEnvironment = process.env.DEPLOY_TARGET || environment;

  /*
   * When running `ember deploy` the first time this file is ran, the environment
   * is undefined, which was causing the endpoints to always be default regardless
   * of the deployment target. This seems to solve it.
   *
   */
  if (!deployEnvironment) {
    return;
  }

  let version = getVersion(environment);
  let endpoint = ENDPOINTS[deployEnvironment] || DEFAULT_ENDPOINT;
  let stage = STAGES[deployEnvironment] || DEFAULT_STAGE;

  let ENV = {
    modulePrefix: 'PREFIX',
    environment,
    rootURL: '/',
    locationType: 'auto',
    EmberENV: {
      FEATURES: {
        // Here you can enable experimental features on an ember canary build
        // e.g. 'with-controller': true
      },
      EXTEND_PROTOTYPES: {
        // Prevent Ember Data from overriding Date.parse.
        Date: false,
      },
    },

    moment: {
      includeTimezone: 'all',
    },

    apiDateFormat: 'YYYY-MM-DDTHH:mm:ss.SSS\\Z',
    timezoneString: 'Pacific/Auckland',

    'ember-do-forms': {
      // Auto generate relevant data-test-* for components
      // Overridable per component
      autoDataTestSelectors: true,

      // CSS classes to be applied to components
      // Overridable per component
      defaultClasses: {
        form: ['Form'],
        field: ['Form-field'],
        label: ['Form-field-label'],
        control: ['Form-field-control'],
        feedback: ['Alert Alert--error'],
        hint: ['Form-field-hint'],
      },

      // CSS classes to be applied to do-field and do-control
      // components based on the validation state of the object
      validationClasses: {
        fieldSuccess: [],
        fieldError: ['has-error'],
        controlSuccess: [],
        controlError: [],
      },
    },

    aws: {
      region: awsRegion,
      api: {
        region: awsRegion,
        endpoint,
        stage,
      },
      s3: {
        region: awsRegion,
        bucketName: 'BUCKETNAME',
        unauthedBucketName: 'UNATHEDBUCKETNAME',
      },
      cognito: {
        userPool: {
          region: awsRegion,
          userPoolId: 'USERPOOLID',
          clientId: 'CLIENTID',
        },

        identityPool: {
          region: awsRegion,
          identityPoolId: 'POOLID',
          logins: {
            cognito: 'COGNITOLOGIN',
          },
        },
      },
    },

    APP: {
      name: 'APPNAME', // displayed in Ember inspector
      version: version.display,
      deployVersion: version.withCommit,
      // Here you can pass flags/options to your application instance
      // when it is created
    },
  };

  if (environment === 'development') {
    // ENV.APP.LOG_RESOLVER = true;
    // ENV.APP.LOG_ACTIVE_GENERATION = true;
    // ENV.APP.LOG_TRANSITIONS = true;
    // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
    // ENV.APP.LOG_VIEW_LOOKUPS = true;
  }

  if (environment === 'test') {
    // Testem prefers this...
    ENV.locationType = 'none';

    // keep test console output quieter
    ENV.APP.LOG_ACTIVE_GENERATION = false;
    ENV.APP.LOG_VIEW_LOOKUPS = false;

    ENV.APP.rootElement = '#ember-testing';
  }

  if (environment === 'production') {
    ENV['ember-cli-mirage'] = {
      enabled: true,
    };
  }

  ENV.contentSecurityPolicy = {
    'default-src': "'none'",
    'script-src': "'self' 'unsafe-eval' http://example.com:35729 https://connect.facebook.net http://connect.facebook.net https://graph.facebook.com",
    'font-src': "'self'",
    'connect-src': "'self' ws://example.com:35729",
    'img-src': "'self' https://www.facebook.com",
    'style-src': "'self' 'unsafe-inline'",
    'media-src': "'self'",
    'frame-src': 'http://static.ak.facebook.com http://staticxx.facebook.com https://s-static.ak.facebook.com https://www.facebook.com http://www.facebook.com',
  };

  return ENV;
};

// Modified version of https://github.com/cibernox/git-repo-version/blob/master/index.js
function getVersion(environment) {
  let info = getRepoInfo();
  let shaLength = 8;

  let packageVersion  = require(path.join(process.cwd(), 'package.json')).version;
  let sha = info.sha || '';
  let prefix;

  if (packageVersion != null) {
    prefix = packageVersion;
  } else if (info.branch) {
    prefix = info.branch;
  } else {
    prefix = 'DETACHED_HEAD';
  }

  let suffix = environment === 'production' ? '' : `<${environment}>`;
  let withCommit = `${prefix}+${sha.slice(0, shaLength) + suffix}`;
  let withTag = info.tag ? `${prefix}#${info.tag + suffix}` : null;

  return {
    display: packageVersion + suffix,
    withCommit,
    withTag,
  };
}

And here's my deploy.js (as said, I'm deploying to S3):

/* jshint node: true */

// All targets that are available for deployment
var deployTargetConfig = {
  'develop': {
    code: 'SOME-CODE',
    region: 'SOME-REGION',
    bucket: 'SOME-BUCKET',

    // For S3 Index Addon. (Note that you shouldn't really be overwritting
    // revisions, as a revision represents a build in time. Thats why we
    // only allow it for develop, to avoid having to commit).
    allowOverwrite: true
  },
  'demo': {
    code: 'SOME-CODEE',
    region: 'SOME-REGION',
    bucket: 'SOME-BUCKET'
  },
  'test': {
    code: 'SOME-CODE',
    region: 'SOME-REGION',
    bucket: 'SOME-BUCKET',
  },
  'production': {
    code: 'SOME-CODE',
    region: 'SOME-REGION',
    bucket: 'SOME-BUCKET',
  },
};

module.exports = function(deployTarget) {
  var ENV = {

    pipeline: {
      alias: {
        s3: { as: ['s3-all', 's3-apple-app-site-association'] },
      },

      runOrder: {
        's3-all': { before: 's3-apple-app-site-association' },
        's3-apple-app-site-association': { after: 's3-all' }
      }
    },

    build: {
      environment: 'production'
    },
    'revision-data': {
      type: 'version-commit'
    },
    'git-tag': {
      deployTag: function(context) {
        var revisionKey  = this.readConfig("revisionKey");
        var deployTarget = context.config.deployTargetCode;

        return ['versions', deployTarget, revisionKey].join('/');
      }
    },
    deployTargetCode: deployTargetConfig[deployTarget].code
    // include other plugin configuration that applies to all deploy targets here
  };

  var credsConfig = {
    accessKeyId: process.env.AWS_KEY,
    secretAccessKey: process.env.AWS_SECRET
  };

  var deploymentTargetConfig = deployTargetConfig[deployTarget];
  var baseConfig = Object.assign({}, deploymentTargetConfig, credsConfig);

  ENV['s3-all'] = Object.assign({}, baseConfig);

  ENV['s3-apple-app-site-association'] = Object.assign({
    filePattern: '**/apple-app-site-association',
    defaultMimeType: 'application/json',
    cacheControl: 'no-cache, no-store, must-revalidate',
    expires: 0
  }, baseConfig);

  ENV['s3-index'] = Object.assign({}, baseConfig);

  return ENV;
};

As per the environment.js I seemed to find a workaround for now (I can deploy properly with the early return I added), but I'm just curious to know if I should be doing something different.

Any comments would be greatly appreciated.

Cheers!

@LevelbossMike
Copy link
Member

LevelbossMike commented Jun 28, 2017

I have never run into this. which version of ember-cli-deploy are you on?

edit

I see that you are running 1.0.0. Are you calling that config somewhere manually?

@LevelbossMike
Copy link
Member

@loqtor Did you fix the issue?

@loqtor
Copy link
Author

loqtor commented Jun 30, 2017

Hey man,

No, I'm still keeping the workaround there. It seems to work fine, but just that is odd to have that early return in environment.js.

I can live with that, but maybe you can have a look since it seems quite strange.

Thanks.
Cheers!

@peabnuts123
Copy link

I have also experienced this issue. I am unsure if environment being undefined is unexpected behaviour or not but I am experiencing this and for some reason my app is deploying to the production site with my debug config, despite never being called with environment=development. Thought maybe it would be worth at least mentioning on this issue that it is perhaps a real thing.

@jakerobers
Copy link

I am also having this issue. Not sure why environment is resulting in undefined.

@divmgl
Copy link

divmgl commented Nov 16, 2017

This issue is also happening to me. The only way to overcome this issue is to actually specify an environment through the command line, which isn't ideal

@lukemelia
Copy link
Contributor

lukemelia commented Nov 16, 2017 via email

@alxpez
Copy link

alxpez commented Apr 12, 2018

any news on this issue?

@givanse
Copy link

givanse commented May 19, 2018

I'm seeing this problem, but I am not using ember-cli-deploy. Landed here from a Google search. So, maybe there is an interaction between ember-cli and some config that is not unique to this addon.

@givanse
Copy link

givanse commented May 19, 2018

I just created a new app from scratch and saw the same, environment is undefined in config/environment.js

ember -v
ember-cli: 3.1.4
node: 9.11.1
os: linux x64

created emberjs/ember.js#16659
ember-cli/ember-cli#7779

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants