${title}
#### Install mlflow from this PR
\`\`\`bash
# mlflow
pip install git+https://github.com/mlflow/mlflow.git@refs/pull/${issue_number}/merge
# mlflow-skinny
pip install git+https://github.com/mlflow/mlflow.git@refs/pull/${issue_number}/merge#subdirectory=libs/skinny
\`\`\`
For Databricks, use the following command:
\`\`\`bash
%sh curl -LsSf https://raw.githubusercontent.com/mlflow/mlflow/HEAD/dev/install-skinny.sh | sh -s pull/${issue_number}/merge
\`\`\`
${activitySection}
`.trim();
await github.rest.issues.createComment({
owner,
repo,
issue_number,
body: devToolsComment,
});
}
// Exit early if the PR author is a bot
if (user.type === "Bot") {
return;
}
const dcoCheck = await getDcoCheck(github, owner, repo, sha);
if (dcoCheck && dcoCheck.conclusion !== "success") {
messages.push(
"#### ❌ DCO check\n\n" +
"The DCO check failed. " +
`Please sign off your commit(s) by following the instructions [here](${dcoCheck.html_url}). ` +
"See https://github.com/mlflow/mlflow/blob/master/CONTRIBUTING.md#sign-your-work for more " +
"details."
);
}
if (label.endsWith(":master")) {
messages.push(
"#### ❌ PR branch check\n\n" +
"This PR was filed from the master branch in your fork, which is not recommended " +
"and may cause our CI checks to fail. Please close this PR and file a new PR from " +
"a non-master branch."
);
}
if (!(body || "").includes("How should the PR be classified in the release notes?")) {
messages.push(
"#### ❌ Invalid PR template\n\n" +
"The PR description is missing required sections. " +
"Please use the [PR template](https://raw.githubusercontent.com/mlflow/mlflow/master/.github/pull_request_template.md)."
);
}
if (messages.length > 0) {
const body =
`@${user.login} Thank you for the contribution! Could you fix the following issue(s)? Otherwise, this PR may be automatically closed.\n\n` +
messages.join("\n\n");
await github.rest.issues.createComment({
owner,
repo,
issue_number,
body,
});
}
};