@asyncapi/converter 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,68 @@
1
+ #This workflow is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ #Purpose of this workflow is to enable anyone to label issue with 'Good First Issue' and 'area/*' with a single command.
5
+ name: Add 'Good First Issue' and 'area/*' labels # if proper comment added
6
+
7
+ on:
8
+ issue_comment:
9
+ types:
10
+ - created
11
+
12
+ jobs:
13
+ add-labels:
14
+ if: ${{!github.event.issue.pull_request && github.event.issue.state != 'closed' && github.actor != 'asyncapi-bot'}}
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Add label
18
+ if: contains(github.event.comment.body, '/good-first-issue') || contains(github.event.comment.body, '/gfi' )
19
+ uses: actions/github-script@v5
20
+ with:
21
+ github-token: ${{ secrets.GH_TOKEN }}
22
+ script: |
23
+ const areas = ['javascript', 'typescript', 'java' , 'go', 'docs', 'ci-cd', 'design'];
24
+ const values = context.payload.comment.body.split(" ");
25
+ switch(values[1]){
26
+ case 'ts':
27
+ values[1] = 'typescript';
28
+ break;
29
+ case 'js':
30
+ values[1] = 'javascript';
31
+ case 'markdown':
32
+ values[1] = 'docs';
33
+ }
34
+ if(values.length != 2 || !areas.includes(values[1])){
35
+ const message = `Hey @${context.payload.sender.login}, your message doesn't follow the requirements, you can try \`/help\`.`
36
+
37
+ await github.rest.issues.createComment({
38
+ issue_number: context.issue.number,
39
+ owner: context.repo.owner,
40
+ repo: context.repo.repo,
41
+ body: message
42
+ })
43
+ } else {
44
+
45
+ //remove complexity and areas if there are any before adding new labels;
46
+ const currentLabels = (await github.rest.issues.listLabelsOnIssue({
47
+ issue_number: context.issue.number,
48
+ owner: context.repo.owner,
49
+ repo: context.repo.repo,
50
+ })).data.map(label => label.name);
51
+
52
+ const shouldBeRemoved = currentLabels.filter(label => (label.startsWith('area/') && !label.endsWith(values[1])));
53
+ shouldBeRemoved.forEach(label => {
54
+ github.rest.issues.deleteLabel({
55
+ owner: context.repo.owner,
56
+ repo: context.repo.repo,
57
+ name: label,
58
+ });
59
+ });
60
+
61
+ //add new labels
62
+ github.rest.issues.addLabels({
63
+ issue_number: context.issue.number,
64
+ owner: context.repo.owner,
65
+ repo: context.repo.repo,
66
+ labels: ['good first issue', `area/${values[1]}`]
67
+ });
68
+ }
@@ -0,0 +1,54 @@
1
+ #This workflow is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ #Purpose of this workflow is to enable anyone to label PR with `ready-to-merge` and `do-not-merge` labels to get stuff merged or blocked from merging
5
+ name: Add ready-to-merge or do-not-merge label # if proper comment added
6
+
7
+ on:
8
+ issue_comment:
9
+ types:
10
+ - created
11
+
12
+ jobs:
13
+ parse-comment-and-add-ready: # for handling cases when you want to mark as ready to merge
14
+ if: github.event.issue.pull_request && github.event.issue.state != 'closed' && github.actor != 'asyncapi-bot'
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Check if PR is draft # such info is not available in the context of issue_comment event
18
+ uses: actions/github-script@v5
19
+ id: checkDraft
20
+ with:
21
+ result-encoding: string
22
+ script: |
23
+ const prDetailsUrl = context.payload.issue.pull_request.url;
24
+ const response = await github.request(prDetailsUrl);
25
+ return response.data.draft;
26
+ - name: Add label
27
+ if: steps.checkDraft.outputs.result == 'false' && (contains(github.event.comment.body, '/ready-to-merge') || contains(github.event.comment.body, '/rtm' ))
28
+ uses: actions/github-script@v5
29
+ with:
30
+ github-token: ${{ secrets.GH_TOKEN }}
31
+ script: |
32
+ github.rest.issues.addLabels({
33
+ issue_number: context.issue.number,
34
+ owner: context.repo.owner,
35
+ repo: context.repo.repo,
36
+ labels: ['ready-to-merge']
37
+ })
38
+
39
+ parse-comment-and-add-block: # for handling cases when you want to mark as do-not-merge
40
+ if: github.event.issue.pull_request && github.event.issue.state != 'closed' && github.actor != 'asyncapi-bot'
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - name: Add label
44
+ if: contains(github.event.comment.body, '/do-not-merge') || contains(github.event.comment.body, '/dnm' )
45
+ uses: actions/github-script@v5
46
+ with:
47
+ github-token: ${{ secrets.GH_TOKEN }}
48
+ script: |
49
+ github.rest.issues.addLabels({
50
+ issue_number: context.issue.number,
51
+ owner: context.repo.owner,
52
+ repo: context.repo.repo,
53
+ labels: ['do-not-merge']
54
+ })
@@ -0,0 +1,32 @@
1
+ #This workflow is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ #Purpose of this workflow is to allow people to merge PR without a need of maintainer doing it. If all checks are in place (including maintainers approval) - JUST MERGE IT!
5
+ name: Automerge For Humans
6
+
7
+ on:
8
+ pull_request_target:
9
+ types:
10
+ - labeled
11
+ - unlabeled
12
+ - synchronize
13
+ - opened
14
+ - edited
15
+ - ready_for_review
16
+ - reopened
17
+ - unlocked
18
+
19
+ jobs:
20
+ automerge-for-humans:
21
+ if: github.event.pull_request.draft == false && (github.event.pull_request.user.login != 'asyncapi-bot' || github.event.pull_request.user.login != 'dependabot[bot]' || github.event.pull_request.user.login != 'dependabot-preview[bot]') #it runs only if PR actor is not a bot, at least not a bot that we know
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: Automerge PR
25
+ uses: pascalgn/automerge-action@v0.14.3
26
+ env:
27
+ GITHUB_TOKEN: "${{ secrets.GH_TOKEN }}"
28
+ MERGE_LABELS: "!do-not-merge,ready-to-merge"
29
+ MERGE_METHOD: "squash"
30
+ MERGE_COMMIT_MESSAGE: "{pullRequest.title} (#{pullRequest.number})"
31
+ MERGE_RETRIES: "20"
32
+ MERGE_RETRY_SLEEP: "30000"
@@ -0,0 +1,35 @@
1
+ #This workflow is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ # Defence from evil contributor that after adding `ready-to-merge` all suddenly makes evil commit or evil change in PR title
5
+ # Label is removed once above action is detected
6
+ name: Remove ready-to-merge label
7
+
8
+ on:
9
+ pull_request_target:
10
+ types:
11
+ - synchronize
12
+ - edited
13
+
14
+ jobs:
15
+ remove-ready-label:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Remove label
19
+ uses: actions/github-script@v5
20
+ with:
21
+ github-token: ${{ secrets.GH_TOKEN }}
22
+ script: |
23
+ const labelToRemove = 'ready-to-merge';
24
+ const labels = context.payload.pull_request.labels;
25
+
26
+ const isLabelPresent = labels.some(label => label.name === labelToRemove)
27
+
28
+ if(!isLabelPresent) return;
29
+
30
+ github.rest.issues.removeLabel({
31
+ issue_number: context.issue.number,
32
+ owner: context.repo.owner,
33
+ repo: context.repo.repo,
34
+ name: labelToRemove
35
+ })
@@ -20,14 +20,13 @@ jobs:
20
20
  script: |
21
21
  const query = `query($owner:String!, $name:String!) {
22
22
  repository(owner:$owner, name:$name){
23
- pullRequests(first: 100){
23
+ pullRequests(first: 100, states: OPEN){
24
24
  nodes{
25
25
  title
26
26
  url
27
27
  author {
28
28
  resourcePath
29
29
  }
30
- state
31
30
  }
32
31
  }
33
32
  }
@@ -38,7 +37,7 @@ jobs:
38
37
  };
39
38
  const { repository: { pullRequests: { nodes } } } = await github.graphql(query, variables);
40
39
 
41
- let orphans = nodes.filter((pr)=> pr.state === 'OPEN' && (pr.author.resourcePath === '/asyncapi-bot' || pr.author.resourcePath === '/apps/dependabot'))
40
+ let orphans = nodes.filter( (pr) => pr.author.resourcePath === '/asyncapi-bot' || pr.author.resourcePath === '/apps/dependabot')
42
41
 
43
42
  if (orphans.length) {
44
43
  core.setOutput('found', 'true');
@@ -1,5 +1,5 @@
1
- #This action is centrally managed in https://github.com/asyncapi/.github/
2
- #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
1
+ # This action is centrally managed in https://github.com/asyncapi/.github/
2
+ # Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo.
3
3
 
4
4
  name: Automerge release bump PR
5
5
 
@@ -17,31 +17,41 @@ on:
17
17
  pull_request_review:
18
18
  types:
19
19
  - submitted
20
-
21
- jobs:
22
20
 
21
+ jobs:
23
22
  autoapprove:
24
- if: github.event.pull_request.draft == false
23
+ if: github.event.pull_request.draft == false && (github.actor == 'asyncapi-bot' || github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]') && !contains(github.event.pull_request.labels.*.name, 'released')
25
24
  runs-on: ubuntu-latest
26
25
  steps:
27
26
  - name: Autoapproving
28
27
  uses: hmarr/auto-approve-action@v2
29
- if: github.actor == 'asyncapi-bot' || github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]'
30
28
  with:
31
29
  github-token: "${{ secrets.GITHUB_TOKEN }}"
32
30
 
31
+ - name: Label autoapproved
32
+ uses: actions/github-script@v5
33
+ with:
34
+ github-token: ${{ secrets.GH_TOKEN }}
35
+ script: |
36
+ github.rest.issues.addLabels({
37
+ issue_number: context.issue.number,
38
+ owner: context.repo.owner,
39
+ repo: context.repo.repo,
40
+ labels: ['autoapproved']
41
+ })
42
+
33
43
  automerge:
34
44
  needs: [autoapprove]
45
+ if: github.event.pull_request.user.login == 'asyncapi-bot' || github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'dependabot-preview[bot]'
35
46
  runs-on: ubuntu-latest
36
47
  steps:
37
48
  - name: Automerging
38
49
  uses: pascalgn/automerge-action@v0.13.0
39
- if: github.actor == 'asyncapi-bot' || github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]'
40
50
  env:
41
51
  GITHUB_TOKEN: "${{ secrets.GH_TOKEN }}"
42
52
  GITHUB_LOGIN: asyncapi-bot
43
53
  MERGE_LABELS: ""
44
54
  MERGE_METHOD: "squash"
45
- MERGE_COMMIT_MESSAGE: "pull-request-title"
55
+ MERGE_COMMIT_MESSAGE: "{pullRequest.title} (#{pullRequest.number})"
46
56
  MERGE_RETRIES: "20"
47
- MERGE_RETRY_SLEEP: "20000"
57
+ MERGE_RETRY_SLEEP: "30000"
@@ -0,0 +1,32 @@
1
+ #This action is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ #This workflow is designed to work with:
5
+ # - autoapprove and automerge workflows for dependabot and asyncapibot.
6
+ # - special release branches that we from time to time create in upstream repos. If we open up PRs for them from the very beginning of the release, the release branch will constantly update with new things from the destination branch they are opened against
7
+
8
+ # It uses GitHub Action that auto-updates pull requests branches, whenever changes are pushed to their destination branch.
9
+ #Autoupdating to latest destination branch works only in the context of upstream repo and not forks
10
+
11
+ name: autoupdate
12
+
13
+ on:
14
+ push:
15
+ branches-ignore:
16
+ - 'version-bump/**'
17
+ - 'dependabot/**'
18
+ - 'bot/**'
19
+ - 'all-contributors/**'
20
+
21
+ jobs:
22
+ autoupdate:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - name: Autoupdating
26
+ uses: docker://chinthakagodawita/autoupdate-action:v1
27
+ env:
28
+ GITHUB_TOKEN: '${{ secrets.GH_TOKEN }}'
29
+ PR_FILTER: "labelled"
30
+ PR_LABELS: "autoapproved"
31
+ PR_READY_STATE: "ready_for_review"
32
+ MERGE_CONFLICT_ACTION: "ignore"
@@ -1,4 +1,10 @@
1
- name: Bump package version in dependent repos
1
+ #This action is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ #Purpose of this action is to update npm package in libraries that use it. It is like dependabot for asyncapi npm modules only.
5
+ #It runs in a repo after merge of release commit and searches for other packages that use released package. Every found package gets updated with lates version
6
+
7
+ name: Bump package version in dependent repos - if Node project
2
8
 
3
9
  on:
4
10
  #It cannot run on release event as when release is created then version is not yet bumped in package.json
@@ -13,20 +19,14 @@ jobs:
13
19
  steps:
14
20
  - name: Checkout repo
15
21
  uses: actions/checkout@v2
16
- - name: Get version from package.json before release step
17
- id: extractver
18
- run: echo "::set-output name=version::$(npm run get:version --silent)"
19
- - name: Get name of package from package.json
20
- id: extractname
21
- run: echo "::set-output name=packname::$(npm run get:name --silent)"
22
- - if: startsWith(github.event.commits[0].message, 'chore(release):')
22
+ - name: Check if Node.js project and has package.json
23
+ id: packagejson
24
+ run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false"
25
+ - if: steps.packagejson.outputs.exists == 'true' && startsWith(github.event.commits[0].message, 'chore(release):')
23
26
  name: Bumping latest version of this package in other repositories
24
- uses: derberg/org-projects-dependency-manager@v1
27
+ uses: derberg/npm-dependency-manager-for-your-github-org@v3
25
28
  with:
26
29
  github_token: ${{ secrets.GH_TOKEN }}
27
30
  committer_username: asyncapi-bot
28
31
  committer_email: info@asyncapi.io
29
- #This is commit message and PR title for repos where this package is in dependencies
30
- commit_message_prod: 'fix: update ${{ steps.extractname.outputs.packname }} to ${{ steps.extractver.outputs.version }} version'
31
- #This is commit message and PR title for repos where this package is in devDependencies
32
- commit_message_dev: 'chore: update ${{ steps.extractname.outputs.packname }} to ${{ steps.extractver.outputs.version }} version'
32
+ repos_to_ignore: html-template #this is temporary until react component releases 1.0, then it can be removed
@@ -0,0 +1,43 @@
1
+ #This workflow is centrally managed in https://github.com/asyncapi/.github/
2
+ #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ name: Create help comment
5
+
6
+ on:
7
+ issue_comment:
8
+ types:
9
+ - created
10
+
11
+ jobs:
12
+ create_help_comment_pr:
13
+ if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '/help') && github.actor != 'asyncapi-bot' }}
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions-ecosystem/action-create-comment@v1
17
+ with:
18
+ github_token: ${{ secrets.GH_TOKEN }}
19
+ body: |
20
+ Hello, @${{ github.actor }}! 👋🏼
21
+
22
+ I'm Genie from the magic lamp. Looks like somebody needs a hand! 🆘
23
+
24
+ At the moment the following comments are supported in pull requests:
25
+
26
+ - `/ready-to-merge` or `/rtm` - This comment will trigger automerge of PR in case all required checks are green, approvals in place and do-not-merge label is not added
27
+ - `/do-not-merge` or `/dnm` - This comment will block automerging even if all conditions are met and ready-to-merge label is added
28
+ create_help_comment_issue:
29
+ if: ${{ !github.event.issue.pull_request && contains(github.event.comment.body, '/help') && github.actor != 'asyncapi-bot' }}
30
+ runs-on: ubuntu-latest
31
+ steps:
32
+ - uses: actions-ecosystem/action-create-comment@v1
33
+ with:
34
+ github_token: ${{ secrets.GH_TOKEN }}
35
+ body: |
36
+ Hello, @${{ github.actor }}! 👋🏼
37
+
38
+ I'm Genie from the magic lamp. Looks like somebody needs a hand! 🆘
39
+
40
+ At the moment the following comments are supported in issues:
41
+
42
+ - `/good-first-issue {js | ts | java | go | docs | design | ci-cd} ` or `/gfi {js | ts | java | go | docs | design | ci-cd} ` - label an issue as a `good first issue`.
43
+ example: `/gfi js` or `/good-first-issue ci-cd`
@@ -16,6 +16,10 @@ jobs:
16
16
  matrix:
17
17
  os: [ubuntu-latest, macos-latest, windows-latest]
18
18
  steps:
19
+ - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows
20
+ run: |
21
+ git config --global core.autocrlf false
22
+ git config --global core.eol lf
19
23
  - name: Checkout repository
20
24
  uses: actions/checkout@v2
21
25
  - name: Check if Node.js project and has package.json
@@ -24,9 +28,11 @@ jobs:
24
28
  shell: bash
25
29
  - if: steps.packagejson.outputs.exists == 'true'
26
30
  name: Setup Node.js
27
- uses: actions/setup-node@v1
31
+ uses: actions/setup-node@v2
28
32
  with:
29
33
  node-version: 14
34
+ cache: 'npm'
35
+ cache-dependency-path: '**/package-lock.json'
30
36
  - if: steps.packagejson.outputs.exists == 'true'
31
37
  name: Install dependencies
32
38
  id: first-installation
@@ -10,7 +10,10 @@ on:
10
10
  # below lines are not enough to have release supported for these branches
11
11
  # make sure configuration of `semantic-release` package mentiones these branches
12
12
  - next
13
- - '**-release'
13
+ - next-major
14
+ - beta
15
+ - alpha
16
+ - '**-release' # custom
14
17
 
15
18
  jobs:
16
19
 
@@ -21,6 +24,10 @@ jobs:
21
24
  matrix:
22
25
  os: [ubuntu-latest, macos-latest, windows-latest]
23
26
  steps:
27
+ - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows
28
+ run: |
29
+ git config --global core.autocrlf false
30
+ git config --global core.eol lf
24
31
  - name: Checkout repository
25
32
  uses: actions/checkout@v2
26
33
  - name: Check if Node.js project and has package.json
@@ -29,9 +36,11 @@ jobs:
29
36
  shell: bash
30
37
  - if: steps.packagejson.outputs.exists == 'true'
31
38
  name: Setup Node.js
32
- uses: actions/setup-node@v1
39
+ uses: actions/setup-node@v2
33
40
  with:
34
41
  node-version: 14
42
+ cache: 'npm'
43
+ cache-dependency-path: '**/package-lock.json'
35
44
  - if: steps.packagejson.outputs.exists == 'true'
36
45
  name: Install dependencies
37
46
  run: npm install
@@ -41,9 +50,13 @@ jobs:
41
50
 
42
51
  release:
43
52
  needs: test
44
- name: Publish to NPM and GitHub
53
+ name: Publish to any of NPM, Github, and Docker Hub
45
54
  runs-on: ubuntu-latest
46
55
  steps:
56
+ - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows
57
+ run: |
58
+ git config --global core.autocrlf false
59
+ git config --global core.eol lf
47
60
  - name: Checkout repository
48
61
  uses: actions/checkout@v2
49
62
  - name: Check if Node.js project and has package.json
@@ -58,13 +71,15 @@ jobs:
58
71
  name: Install dependencies
59
72
  run: npm install
60
73
  - if: steps.packagejson.outputs.exists == 'true'
61
- name: Release to NPM and GitHub
74
+ name: Publish to any of NPM, Github, and Docker Hub
62
75
  id: release
63
76
  env:
64
77
  GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
65
78
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
79
+ DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
80
+ DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
66
81
  GIT_AUTHOR_NAME: asyncapi-bot
67
82
  GIT_AUTHOR_EMAIL: info@asyncapi.io
68
83
  GIT_COMMITTER_NAME: asyncapi-bot
69
84
  GIT_COMMITTER_EMAIL: info@asyncapi.io
70
- run: npm run release
85
+ run: npm run release
@@ -1,5 +1,7 @@
1
1
  #This action is centrally managed in https://github.com/asyncapi/.github/
2
2
  #Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo
3
+
4
+ #This action notifies community on slack whenever there is a new issue, PR or discussion started in given repository
3
5
  name: Notify slack
4
6
 
5
7
  on:
@@ -10,6 +12,9 @@ on:
10
12
  pull_request_target:
11
13
  types: [opened, reopened, ready_for_review]
12
14
 
15
+ discussion:
16
+ types: [created]
17
+
13
18
  jobs:
14
19
 
15
20
  issue:
@@ -47,3 +52,21 @@ jobs:
47
52
  SLACK_TITLE: 💪 New Pull Request 💪
48
53
  SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}}
49
54
  MSG_MINIMAL: true
55
+
56
+ discussion:
57
+ if: github.event_name == 'discussion' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]'
58
+ name: On every new pull request
59
+ runs-on: ubuntu-latest
60
+ steps:
61
+ - name: Convert markdown to slack markdown for pull request
62
+ uses: LoveToKnow/slackify-markdown-action@v1.0.0
63
+ id: discussionmarkdown
64
+ with:
65
+ text: "[${{github.event.discussion.title}}](${{github.event.discussion.html_url}}) \n ${{github.event.discussion.body}}"
66
+ - name: Send info about pull request
67
+ uses: rtCamp/action-slack-notify@v2
68
+ env:
69
+ SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}}
70
+ SLACK_TITLE: 💬 New Discussion 💬
71
+ SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}}
72
+ MSG_MINIMAL: true
@@ -11,20 +11,32 @@ jobs:
11
11
  stale:
12
12
  runs-on: ubuntu-latest
13
13
  steps:
14
- - uses: actions/stale@v1.1.0
14
+ - uses: actions/stale@v4.0.0
15
15
  with:
16
16
  repo-token: ${{ secrets.GITHUB_TOKEN }}
17
17
  stale-issue-message: |
18
18
  This issue has been automatically marked as stale because it has not had recent activity :sleeping:
19
- It will be closed in 60 days if no further activity occurs. To unstale this issue, add a comment with detailed explanation.
20
- Thank you for your contributions :heart:
19
+
20
+ It will be closed in 120 days if no further activity occurs. To unstale this issue, add a comment with a detailed explanation.
21
+
22
+ There can be many reasons why some specific issue has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under [open governance model](https://github.com/asyncapi/community/blob/master/CHARTER.md).
23
+
24
+ Let us figure out together how to push this issue forward. Connect with us through [one of many communication channels](https://github.com/asyncapi/community/issues/1) we established here.
25
+
26
+ Thank you for your patience :heart:
21
27
  stale-pr-message: |
22
28
  This pull request has been automatically marked as stale because it has not had recent activity :sleeping:
23
- It will be closed in 60 days if no further activity occurs. To unstale this pull request, add a comment with detailed explanation.
24
- Thank you for your contributions :heart:
25
- days-before-stale: 60
26
- days-before-close: 60
29
+
30
+ It will be closed in 120 days if no further activity occurs. To unstale this pull request, add a comment with detailed explanation.
31
+
32
+ There can be many reasons why some specific pull request has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under [open governance model](https://github.com/asyncapi/community/blob/master/CHARTER.md).
33
+
34
+ Let us figure out together how to push this pull request forward. Connect with us through [one of many communication channels](https://github.com/asyncapi/community/issues/1) we established here.
35
+
36
+ Thank you for your patience :heart:
37
+ days-before-stale: 120
38
+ days-before-close: 120
27
39
  stale-issue-label: stale
28
40
  stale-pr-label: stale
29
- exempt-issue-label: keep-open
30
- exempt-pr-label: keep-open
41
+ exempt-issue-labels: keep-open
42
+ exempt-pr-labels: keep-open
@@ -15,16 +15,69 @@ jobs:
15
15
  welcome:
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
- - uses: actions/first-interaction@v1
18
+ - uses: actions/github-script@v3
19
19
  with:
20
- repo-token: ${{ secrets.GITHUB_TOKEN }}
21
- issue-message: |
22
- Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our [contributors guide](https://github.com/asyncapi/.github/blob/master/CONTRIBUTING.md) and the instructions about a [basic recommended setup](https://github.com/asyncapi/.github/blob/master/git-workflow.md) useful for opening a pull request.
23
-
24
- Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out [this issue](https://github.com/asyncapi/asyncapi/issues/115).
25
-
26
-
27
- pr-message: |
28
- Welcome to AsyncAPI. Thanks a lot for creating your first pull request. Please check out our [contributors guide](https://github.com/asyncapi/.github/blob/master/CONTRIBUTING.md) and the instructions about a [basic recommended setup](https://github.com/asyncapi/.github/blob/master/git-workflow.md) useful for opening a pull request.
29
-
30
- Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out [this issue](https://github.com/asyncapi/asyncapi/issues/115).
20
+ github-token: ${{ secrets.GITHUB_TOKEN }}
21
+ script: |
22
+ const issueMessage = `Welcome to AsyncAPI. Thanks a lot for reporting your first issue. Please check out our [contributors guide](https://github.com/asyncapi/community/blob/master/CONTRIBUTING.md) and the instructions about a [basic recommended setup](https://github.com/asyncapi/.github/blob/master/git-workflow.md) useful for opening a pull request.<br />Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out [this issue](https://github.com/asyncapi/asyncapi/issues/115).`;
23
+ const prMessage = `Welcome to AsyncAPI. Thanks a lot for creating your first pull request. Please check out our [contributors guide](https://github.com/asyncapi/community/blob/master/CONTRIBUTING.md) useful for opening a pull request.<br />Keep in mind there are also other channels you can use to interact with AsyncAPI community. For more details check out [this issue](https://github.com/asyncapi/asyncapi/issues/115).`;
24
+ if (!issueMessage && !prMessage) {
25
+ throw new Error('Action must have at least one of issue-message or pr-message set');
26
+ }
27
+ const isIssue = !!context.payload.issue;
28
+ let isFirstContribution;
29
+ if (isIssue) {
30
+ const query = `query($owner:String!, $name:String!, $contributer:String!) {
31
+ repository(owner:$owner, name:$name){
32
+ issues(first: 1, filterBy: {createdBy:$contributer}){
33
+ totalCount
34
+ }
35
+ }
36
+ }`;
37
+ const variables = {
38
+ owner: context.repo.owner,
39
+ name: context.repo.repo,
40
+ contributer: context.payload.sender.login
41
+ };
42
+ const { repository: { issues: { totalCount } } } = await github.graphql(query, variables);
43
+ isFirstContribution = totalCount === 1;
44
+ } else {
45
+ const query = `query($qstr: String!) {
46
+ search(query: $qstr, type: ISSUE, first: 1) {
47
+ issueCount
48
+ }
49
+ }`;
50
+ const variables = {
51
+ "qstr": `repo:${context.repo.owner}/${context.repo.repo} type:pr author:${context.payload.sender.login}`,
52
+ };
53
+ const { search: { issueCount } } = await github.graphql(query, variables);
54
+ isFirstContribution = issueCount === 1;
55
+ }
56
+
57
+ if (!isFirstContribution) {
58
+ console.log(`Not the users first contribution.`);
59
+ return;
60
+ }
61
+ const message = isIssue ? issueMessage : prMessage;
62
+ // Add a comment to the appropriate place
63
+ if (isIssue) {
64
+ const issueNumber = context.payload.issue.number;
65
+ console.log(`Adding message: ${message} to issue #${issueNumber}`);
66
+ await github.issues.createComment({
67
+ owner: context.payload.repository.owner.login,
68
+ repo: context.payload.repository.name,
69
+ issue_number: issueNumber,
70
+ body: message
71
+ });
72
+ }
73
+ else {
74
+ const pullNumber = context.payload.pull_request.number;
75
+ console.log(`Adding message: ${message} to pull request #${pullNumber}`);
76
+ await github.pulls.createReview({
77
+ owner: context.payload.repository.owner.login,
78
+ repo: context.payload.repository.name,
79
+ pull_number: pullNumber,
80
+ body: message,
81
+ event: 'COMMENT'
82
+ });
83
+ }