test assign-milestone
This commit is contained in:
parent
7c3bb81709
commit
1124d1661a
123
.github/workflows/assign-milestones.js
vendored
Normal file
123
.github/workflows/assign-milestones.js
vendored
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
// get the project
|
||||||
|
// check if the name matches a version x.y or x.y.z
|
||||||
|
// created
|
||||||
|
// check that there is a corresponding milestone
|
||||||
|
// else create that milestone
|
||||||
|
// and assign the issue to the milestone
|
||||||
|
// deleted
|
||||||
|
// get the issue
|
||||||
|
// if issue is not closed,
|
||||||
|
// remove issue from milestone, if any
|
||||||
|
|
||||||
|
module.exports = ({github, context}) => {
|
||||||
|
|
||||||
|
const restapi = github.rest
|
||||||
|
|
||||||
|
// get and validate the event name
|
||||||
|
const eventName = github.event_name
|
||||||
|
if (eventName != 'project_card') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// get and validate the event action
|
||||||
|
const eventAction = github.event.action
|
||||||
|
if (eventAction != 'created' && eventAction != 'deleted') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// get and validate the card
|
||||||
|
const cardMeh = context.action.card_number
|
||||||
|
|
||||||
|
// get and validate the project
|
||||||
|
|
||||||
|
// get and validate the card item
|
||||||
|
|
||||||
|
//
|
||||||
|
if (eventAction == 'deleted') {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//const project_name = 'The API Team Board'
|
||||||
|
|
||||||
|
const project_name = 'test-project'
|
||||||
|
|
||||||
|
function firstOrDefault(items, predicate) {
|
||||||
|
for (const item of items) {
|
||||||
|
if (predicate(item)) {
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the card
|
||||||
|
// find the type: issue, PR, note
|
||||||
|
// if issue or PR
|
||||||
|
// find corresponding milestone
|
||||||
|
// created if needed
|
||||||
|
// assign milestone
|
||||||
|
// madness - this is the only way we can explore context ?!
|
||||||
|
console.log(context);
|
||||||
|
console.log(context.payload);
|
||||||
|
return;
|
||||||
|
|
||||||
|
// find the project
|
||||||
|
console.log('find project...')
|
||||||
|
const projects = await restapi.projects.listForRepo({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo
|
||||||
|
})
|
||||||
|
console.log(`retrieved ${projects.data.length} projects.`)
|
||||||
|
const project = firstOrDefault(projects.data, (x) => x.name === project_name)
|
||||||
|
if (!project) {
|
||||||
|
core.setFailed(`Failed to find project "${project_name}".`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log(`project id: ${project.id}.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine content type
|
||||||
|
console.log('determine content type...')
|
||||||
|
const event_name = context.eventName
|
||||||
|
var content_type = null
|
||||||
|
if (event_name === 'issues') {
|
||||||
|
content_type = 'Issue'
|
||||||
|
}
|
||||||
|
if (event_name === 'pull_request') {
|
||||||
|
content_type = 'PullRequest'
|
||||||
|
}
|
||||||
|
if (!content_type) {
|
||||||
|
core.setFailed(`Unexpected event name "${event_name}".`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log(`content type: ${content_type}.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the issue/pr
|
||||||
|
console.log('get the issue/pr...')
|
||||||
|
const item = await restapi.issues.get({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number
|
||||||
|
})
|
||||||
|
if (!item) {
|
||||||
|
core.setFailed(`Failed to get issue ${context.issue.number}.`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log(`issue id: ${item.data.id}.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('create the card...')
|
||||||
|
console.log(`in column ${column.id} for item ${item.data.id} of type ${content_type}`)
|
||||||
|
await restapi.projects.createCard({
|
||||||
|
column_id: column.id,
|
||||||
|
//note:,
|
||||||
|
content_id: item.data.id,
|
||||||
|
content_type: content_type
|
||||||
|
})
|
||||||
|
console.log('created')
|
||||||
|
}
|
||||||
|
|
40
.github/workflows/assign-milestones.yml
vendored
Normal file
40
.github/workflows/assign-milestones.yml
vendored
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
name: Assign Milestones
|
||||||
|
on:
|
||||||
|
project_card:
|
||||||
|
# ignore: moved, converted, edited
|
||||||
|
types: [ created, deleted ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
assign:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Assign
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout
|
||||||
|
|
||||||
|
- name: Assign
|
||||||
|
uses: actions/github-script@v5
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.MY_GITHUB_TOKEN_TESTREPO }}
|
||||||
|
script: |
|
||||||
|
|
||||||
|
# see https://github.com/actions/github-script
|
||||||
|
#
|
||||||
|
# github A pre-authenticated octokit/rest.js client with pagination plugins
|
||||||
|
# .rest The REST API (e.g. github.rest.issues.get(...) gets an issue)
|
||||||
|
# .request
|
||||||
|
# .paginate
|
||||||
|
# .graphql
|
||||||
|
# context An object containing the context of the workflow run
|
||||||
|
# see https://github.com/actions/toolkit/blob/main/packages/github/src/context.ts
|
||||||
|
# core A reference to the @actions/core package
|
||||||
|
# glob A reference to the @actions/glob package
|
||||||
|
# io A reference to the @actions/io package
|
||||||
|
# exec A reference to the @actions/exec package
|
||||||
|
# require A proxy wrapper around the normal Node.js require to enable requiring relative paths
|
||||||
|
# (relative to the current working directory) + requiring npm packages installed in the
|
||||||
|
# current working directory.
|
||||||
|
|
||||||
|
const script = require('./assign-milestone.js')
|
||||||
|
script({github, context})
|
Loading…
Reference in New Issue
Block a user