probot / ideas

Share ideas for new GitHub Apps built with Probot
96 stars 48 forks source link

Turn all cards into issues #68

Open raulriera opened 6 years ago

raulriera commented 6 years ago

The process of creating a board, filling it with cards and then turn those cards into issues is pretty tedious. Specially annoying when I have to them duplicate the issues for iOS and Android (that app is already done tho 😉)

I don't know what kind of trigger this should be, or what should be the default behaviour since the cards don't have titles or any "rich formatting".

Any suggestions? I would love to get started on this

JasonEtco commented 6 years ago

Just so that I understand, you'd want this behavior, but for all notes in a project board?

image

Sounds neat! As you already know, probot-commands would help but its a bit of a weird connection to write a command in an issue that affects unrelated things.

What about listening for a project rename, to something like:

before: 'Project name'
after: '[convert] Project name'

Definitely hacky.

raulriera commented 6 years ago

Yes, exactly that... Do this work in bulk 🙂 ..

Ouuu I like the project rename thing

JasonEtco commented 6 years ago

You'd probably want to rename it back to the before when you're done too 😉

Berkmann18 commented 6 years ago

@raulriera You can do that with GitKraken Glo which sync cards to issues a la Trello-style.

dblado commented 5 years ago

I just started exploring w/ Github projects and also was looking for how to convert all cards on a board into issues.

adnathanail commented 4 years ago

I've just hacked something together from the demo project on Glitch that will autoconvert cards as they're created as opposed to the whole project at once, but might be of interest?

Go here: https://probot.github.io/docs/hello-world/ Click remix on Glitch

index.js

module.exports = (app) => {
  // Your code here
  app.log('Yay! The app was loaded!')

  // example of probot responding 'Hello World' to a new issue being opened
  app.on('project_card.created', async context => {
    // `context` extracts information from the event, which can be passed to
    // GitHub API calls. This will return:
    //   {owner: 'yourname', repo: 'yourrepo', number: 123, body: 'Hello World!}

    const old_card = context.payload.project_card
    if (!old_card.note) { // Prevent big loop!
      return
    }

    const req1 = await context.github.projects.deleteCard({
      card_id: old_card.id
    });

    const note_split = old_card.note.split("\r\n")
    const title = note_split[0];
    const body = note_split[1];
    const new_issue = await context.github.issues.create({
      owner: "CHANGEME",
      repo: "CHANGEME",
      title: title,
      body: body
    })

    const new_card = await context.github.projects.createCard({
      column_id: old_card.column_id,
      content_id: new_issue.data.id,
      content_type: "Issue"
    })
  })
}

app.yml

Change default_events to project_card Change default_permissions:

mirusky commented 3 years ago

I asked in octokit/rest.js and in octokit/webhooks.js and they answer me. They explained to me there's no rest endpoint to make this action, otherwise there's a graphql mutation to do that. You could found an example here

await context.octokit.graphql(`
  mutation ($cardId: ID!, $repositoryId: ID!, $title: String, $body: String) {
    convertProjectCardNoteToIssue(input: {projectCardId: $cardId, repositoryId: $repositoryId, title: $title, body: $body}) {
      clientMutationId
    }
  }`,
{
  projectCardId: context.payload.project_card.id,
  repositoryId: context.payload.repository.id,
  // optional
  // title: 'new issue title', // defaults to card content
  // body: 'new issue description'
})
debola31 commented 3 years ago

Would love if there was a GitHub Action to do this