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

TypeError: normalizedName.indexOf is not a function #61

Closed
dominikfoldi opened this issue Oct 1, 2020 · 17 comments
Closed

TypeError: normalizedName.indexOf is not a function #61

dominikfoldi opened this issue Oct 1, 2020 · 17 comments

Comments

@dominikfoldi
Copy link

When the action runs it throws the following error:

Error: TypeError: normalizedName.indexOf is not a function
Error: normalizedName.indexOf is not a function

image

It seems that it is coming from the bundled eslint. Why devDependencies are bundled into the action's bundle in the first place? Isn't it possible to leave the devDependencies out with ncc?

I would really like to use your action but I don't have any experience with ncc so I cannot provide a PR unfortunately.

@JulienKode
Copy link
Owner

Hi @dominikfoldi

To help you and debug on this can you show me your:

  • package.json
  • commitlint.config.js
  • your github action

Then I'll have informations to help you and dive on this

Have a nice day

@dominikfoldi
Copy link
Author

Sure @JulienKode!

package.json

{
  "name": "my-project",
  "devDependencies": {
    "@commitlint/config-angular": "^11.0.0",
    "lerna": "^3.20.0",
  }
}

commitlint.config.js

const Project = require("@lerna/project");
const fs = require("fs");

const POC_FOLDER_PATH = "poc";

/**
 * Enum for scope requirements.
 */
const scopeRequirements = {
  REQUIRED: "required",
  OPTIONAL: "optional",
  FORBIDDEN: "forbidden"
};

/**
 * Valid types of commits with their scope requirements.
 */
const COMMIT_TYPES = {
  build: {
    name: "build",
    scope: scopeRequirements.OPTIONAL
  },
  release: {
    name: "release",
    scope: scopeRequirements.FORBIDDEN
  },
  docs: {
    name: "docs",
    scope: scopeRequirements.OPTIONAL
  },
  feat: {
    name: "feat",
    scope: scopeRequirements.REQUIRED
  },
  fix: {
    name: "fix",
    scope: scopeRequirements.REQUIRED
  },
  perf: {
    name: "perf",
    scope: scopeRequirements.REQUIRED
  },
  refactor: {
    name: "refactor",
    scope: scopeRequirements.REQUIRED
  },
  style: {
    name: "style",
    scope: scopeRequirements.OPTIONAL
  },
  test: {
    name: "test",
    scope: scopeRequirements.OPTIONAL
  },
  prot: {
    name: "prot",
    scope: scopeRequirements.REQUIRED
  },
  revert: {
    name: "revert",
    scope: scopeRequirements.FORBIDDEN
  },
};

/**
 * Our custom scopes
 */
const CUSTOM_SCOPES = ["packaging", "dev-docs"];

/**
 * Array of valid types.
 */
const types = Object.keys(COMMIT_TYPES);

/**
 * Construct the scopes array from the custom scopes, lerna package names and POC folder names.
 */
async function getScopes() {
  const lernaPackages = (await new Project().getPackages())
    .map(package => package.name)
    .map((name) => (name.charAt(0) === '@' ? name.split('/')[1] : name));
  const customScopes = CUSTOM_SCOPES;
  const pocs = fs.readdirSync(POC_FOLDER_PATH, { withFileTypes: true })
    .filter(file => file.isDirectory()).map(directory => directory.name);

  return [].concat(lernaPackages, customScopes, pocs);
}

/**
 * This rule checks if the scopes were used correctly.
 * @param type type of the commit 
 * @param scope optional scope of the commit message 
 */
function scopeRequirementRule({ type, scope }) {
  const scopeRequirement = COMMIT_TYPES[type].scope;

  if (scopeRequirement === scopeRequirements.FORBIDDEN && scope) {
    return [false, `scopes are forbidden for commits with type '${type}', but a scope of '${scope}' was provided`];
  }

  if (scopeRequirement === scopeRequirements.REQUIRED && !scope) {
    return [false, `scopes are required for commits with type '${type}', but no scope was provided`];
  }

  return [true];
}

module.exports = {
  extends: ["@commitlint/config-angular"],
  rules: {
    'scope-requirement-rule': [2, 'always'],
    'type-enum': [2, 'always', types],
    'scope-enum': getScopes().then(scopes => [2, 'always', scopes])
  },
  plugins: [
    {
      rules: {
        'scope-requirement-rule': scopeRequirementRule
      }
    }
  ]
};

lint-pr.yml

name: Lint PRs

on:
  pull_request:
    types: ['opened', 'edited', 'reopened', 'synchronize']

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 10.x

      - name: Install npm dependencies
        run: npm ci

      - name: Lint the PR title to match our convention
        uses: JulienKode/[email protected]

I left out the private/not relevant information.

Thank you!

@dominikfoldi
Copy link
Author

@JulienKode I forked your example repository and configured it like our project is configured. The job is failing there too, see: https://github.com/dominikfoldi/pull-request-name-linter-action-example/runs/1198471507?check_suite_focus=true

@JulienKode
Copy link
Owner

It does not work because this plugin is currently using @commitlint/lint v8, and it now needs to be updated to the version 11

While updating to v11 I face some issue that seems coming inside: https://github.com/davidtheclark/cosmiconfig

It is not possible to load the commitlint.config file

We need to dive more on this, to find out what is the issue and update this plugin to the v11

(we should version this plugin with the same version of commit lint may be ? )

@dominikfoldi
Copy link
Author

dominikfoldi commented Oct 14, 2020

Maybe we can version the plugin with the versions of commitlint but I have a feeling that it doesn't worth the effort. I think that first we should try to move to the latest commitlint version and if somebody complains that it is creating an issue for them, then consider the multiple version support.

@JulienKode
Copy link
Owner

You're right, I think the main priority is to update to the latest version of commitlint then having a versioning strategy

@dominikfoldi
Copy link
Author

@JulienKode can I help you somehow with this?

@JulienKode
Copy link
Owner

JulienKode commented Oct 23, 2020

I've made a minimal reproduction for this bug on the following branch:

When you go on it you can do:

  • yarn build:pack
  • node lib/main.js (it will work)
  • node dist/index.js (it will not work)

When we are using it with babel it work but when we pack it with ncc we have a issue inside cosmiconfig, the issue looks like this: cosmiconfig/cosmiconfig#235

Maybe we can try to investigate on this as now we have a reproductible issue

@JulienKode
Copy link
Owner

The difference with lib/main.js and dist/index.js is that in the dist we pack it with the node_modules like here: https://github.com/actions/typescript-action/blob/main/package.json

@dominikfoldi
Copy link
Author

Maybe we should throw out ncc and use Webpack, Rollup or other packaging solution. What do you think?

@JulienKode
Copy link
Owner

JulienKode commented Oct 30, 2020

The issue seems related to: https://github.com/sindresorhus/import-fresh, this is the same issue as sindresorhus/import-fresh#18 that seems to block the update to commitlint v11, I do not think if changing to webpack or rollup can change this issue as we will have only one bundle and the error that we have happens when there is no parent module. But we can try to move to webpack too if you want, or rollup

sindresorhus/import-fresh#19 can fix the issue I think

@JulienKode
Copy link
Owner

I think this is the last blocker before upgrading this action to v11 of commitlint

@JulienKode
Copy link
Owner

I release a new version https://github.com/JulienKode/pull-request-name-linter-action/releases/tag/v0.2.0

This should fix this issue

@JulienKode
Copy link
Owner

Let me know if you still have the issue or not

@JulienKode
Copy link
Owner

We can close this issue if you still have it after the update @dominikfoldi, feel free to re-open this issue

@dominikfoldi
Copy link
Author

Just tested it. It is working like a charm! Thank you @JulienKode! 🌮

@JulienKode
Copy link
Owner

Perfect ! Glad that it work for you, thanks for raising this issue

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

2 participants