cml: CML initialization is broken on GH in container mode

Basic CML workflow like this is broken.

I’m getting:

{"level":"error","message":"Command failed: git config --get remote.origin.url","output":[null,{"data":[],"type":"Buffer"},{"data":[],"type":"Buffer"}],"pid":124,"signal":null,"stack":"Error: Command failed: git config --get remote.origin.url\n    at checkExecSyncError (node:child_process:828:11)\n    at execSync (node:child_process:902:15)\n    at gitRemoteUrl (/usr/lib/node_modules/@dvcorg/cml/src/cml.js:29:15)\n    at new CML (/usr/lib/node_modules/@dvcorg/cml/src/cml.js:76:44)\n    at Object.exports.handler (/usr/lib/node_modules/@dvcorg/cml/bin/cml/ci.js:10:15)\n    at /usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:9054\n    at j (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:4931)\n    at M.applyMiddlewareAndGetResult (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:9023)\n    at M.runCommand (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:7206)\n    at Xt.[runYargsParserAndExecuteCommands] (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:57164)\n    at Xt.parse (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:39275)\n    at Object.<anonymous> (/usr/lib/node_modules/@dvcorg/cml/bin/cml.js:90:4)\n    at Module._compile (node:internal/modules/cjs/loader:1103:14)\n    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)\n    at Module.load (node:internal/modules/cjs/loader:981:32)\n    at Function.Module._load (node:internal/modules/cjs/loader:822:12)","status":1,"stderr":{"data":[],"type":"Buffer"},"stdout":{"data":[],"type":"Buffer"}}

Command git config --get remote.origin.url that is triggered in CML ctr fails.

Most likely this is due to some breaking changes in action checkout (v2 and v3 both affected). They have recently had to upgrade those due to recent update of Git on GH https://github.blog/2022-04-12-git-security-vulnerability-announced/

(more info for the reference is here: https://iterativeai.slack.com/archives/C01900GSB4J/p1650245948446699 (internal link))

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 2
  • Comments: 16 (16 by maintainers)

Most upvoted comments

Right, thanks for clarifying this one more time, Helio.

If you mean setting safe.directory as part of every CML command, that would be option 2 on https://github.com/iterative/cml/issues/970#issuecomment-1101517765 more or less. 🤔

Yes, part of every command. Not exactly option 2 if I understand it right, since cml ci might be doing a bit more than that.

@0x2b3bfa0 are there other way to get the same result as git config --get remote.origin.url in JS code?

Yes, see the parse-git-config package for example, but it’s not enough to replace all our other interactions with Git.

that’s the only thing that is failing, right?

It’s rather the first thing that is failing. Any git command we run will produce the same error:

fatal: unsafe repository ('/path/to/repository' is owned by someone else)
To add an exception for this directory, call:

        git config --global --add safe.directory /path/to/repository

it looks the only thing that we are using that for is to determine GH/GL/BB?

I’d wish! 😅 We use many other git commands for various purposes.

@0x2b3bfa0 are there other way to get the same result as git config --get remote.origin.url in JS code? that’s the only thing that is failing, right? and it looks the only thing that we are using that for is to determine GH/GL/BB? maybe there are also other ways to do thi?

Also (/CC @iterative/cml) think we recommend actions/checkout before setup-cml, right?

minimal example:

name: test cml ci
on:
  push:
  workflow_dispatch:

jobs:
  test-v2:
    runs-on: ubuntu-latest
    container: ghcr.io/iterative/cml:latest
    steps:
      - uses: actions/checkout@v2
      - run: cml ci
  test-v3:
    runs-on: ubuntu-latest
    container: ghcr.io/iterative/cml:latest
    steps:
      - uses: actions/checkout@v3
      - run: cml ci
  test-setup-v2:
    runs-on: ubuntu-latest
    steps:
      - uses: iterative/setup-cml@v1
      - uses: actions/checkout@v2
      - run: cml ci
  test-setup-v3:
    runs-on: ubuntu-latest
    steps:
      - uses: iterative/setup-cml@v1
      - uses: actions/checkout@v3
      - run: cml ci

https://github.com/dacbd/err/actions/runs/2182120620

test-v2 / test-v3 fail with an error:

{
  "level": "error",
  "message": "Command failed: git config --get remote.origin.url",
  "output": [
    null,
    {
      "data": [],
      "type": "Buffer"
    },
    {
      "data": [],
      "type": "Buffer"
    }
  ],
  "pid": 126,
  "signal": null,
  "stack": "Error: Command failed: git config --get remote.origin.url\n    at checkExecSyncError (node:child_process:828:11)\n    at execSync (node:child_process:902:15)\n    at gitRemoteUrl (/usr/lib/node_modules/@dvcorg/cml/src/cml.js:29:15)\n    at new CML (/usr/lib/node_modules/@dvcorg/cml/src/cml.js:76:44)\n    at Object.exports.handler (/usr/lib/node_modules/@dvcorg/cml/bin/cml/ci.js:10:15)\n    at /usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:9054\n    at j (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:4931)\n    at M.applyMiddlewareAndGetResult (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:9023)\n    at M.runCommand (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:7206)\n    at Xt.[runYargsParserAndExecuteCommands] (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:57164)\n    at Xt.parse (/usr/lib/node_modules/@dvcorg/cml/node_modules/yargs/build/index.cjs:1:39275)\n    at Object.<anonymous> (/usr/lib/node_modules/@dvcorg/cml/bin/cml.js:90:4)\n    at Module._compile (node:internal/modules/cjs/loader:1103:14)\n    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)\n    at Module.load (node:internal/modules/cjs/loader:981:32)\n    at Function.Module._load (node:internal/modules/cjs/loader:822:12)",
  "status": 1,
  "stderr": {
    "data": [],
    "type": "Buffer"
  },
  "stdout": {
    "data": [],
    "type": "Buffer"
  }
}

when I expect them to complain with same token not found as the test-setup-v2/v3