summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2019-08-19 01:49:51 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-19 01:49:52 +0900
commit2f6c8ed26eec4ad2d2fdaa0823cc63ba32f4c7a2 (patch)
tree431e2c9874a20051da335624ee68313f87130db8
parente4c43207f9c7c56ecc76bb941c08a686a242b1de (diff)
Implement Slack notification for Actions
-rw-r--r--.github/actions/notify-slack/action.yml53
-rw-r--r--.github/workflows/macos.yml21
-rw-r--r--.github/workflows/ubuntu.yml18
-rw-r--r--.github/workflows/windows.yml10
4 files changed, 85 insertions, 17 deletions
diff --git a/.github/actions/notify-slack/action.yml b/.github/actions/notify-slack/action.yml
new file mode 100644
index 0000000000..1a51a2503a
--- /dev/null
+++ b/.github/actions/notify-slack/action.yml
@@ -0,0 +1,53 @@
+name: notify-slack
+description: You can notify slack of GitHub Actions.
+author: k0kubun
+inputs:
+ status:
+ description: Success or Failure
+ matrix_name:
+ description: Matrix task name
+ committer_name:
+ description: Git committer name
+ commit_message:
+ description: Git commit message
+ commit_timestamp:
+ description: Git commit timestamp
+runs:
+ using: docker
+ image: 'docker://ruby:2.6-slim'
+ args:
+ - /usr/local/bin/ruby
+ - -e
+ - |-
+ require 'json'
+ require 'net/http'
+ require 'uri'
+
+ github_repo = ENV.fetch('GITHUB_REPOSITORY')
+ github_sha = ENV.fetch('GITHUB_SHA')
+ github_ref = ENV.fetch('GITHUB_REF')
+
+ workflow = ENV.fetch('GITHUB_WORKFLOW')
+ matrix = ENV.fetch('INPUT_MATRIX_NAME')
+ status = ENV.fetch('INPUT_STATUS')
+
+ message = ENV.fetch('INPUT_COMMIT_MESSAGE')
+ timestamp = ENV.fetch('INPUT_COMMIT_TIMESTAMP')
+ committer = ENV.fetch('INPUT_COMMITTER_NAME')
+
+ commit_url = "https://github.com/#{github_repo}/commit/#{github_sha}"
+ attachment = {
+ title: "#{status}: #{workflow} / #{matrix}",
+ title_link: "#{commit_url}/checks",
+ text: "<#{commit_url}|#{github_sha[0...10]}> of #{github_repo}@#{File.basename(github_ref)} "\
+ "by #{committer} on #{timestamp}: #{message}",
+ color: status == 'Success' ? 'good' : 'danger',
+ }
+
+ resp = Net::HTTP.post(
+ URI(ENV.fetch('SLACK_WEBHOOK_URL')),
+ { attachments: [attachment] }.to_json,
+ { 'Content-Type' => 'application/json' },
+ )
+ puts "#{resp.code} (#{resp.body}) -- #{payload.to_json}"
+ resp.value
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index e357e3ad2e..d974a9f7ad 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -42,19 +42,20 @@ jobs:
- name: configure
run: ./configure -C --disable-install-doc --with-openssl-dir=$(brew --prefix openssl@1.1) --with-readline-dir=$(brew --prefix readline)
- run: make $JOBS
- - name: make check
+ - name: Tests
run: make -s ${{ matrix.test_task }}
env:
TESTOPTS: "$JOBS -q --tty=no"
MSPECOPT: "-ff" # not using `-j` because sometimes `mspec -j` silently dies
- if: matrix.test_task == 'check'
- # test-bundler/test-bundled-gems are separated because it randomly fails and ends up cancelling `make check`.
- # TODO: Remove `continue-on-error` once they become stable and also we have a notification for their failure.
- - name: make test-bundler/test-bundled-gems
- run: make -s ${{ matrix.test_task }}
- env:
- TESTOPTS: "$JOBS -q --tty=no"
- continue-on-error: true
- if: matrix.test_task != 'check'
- name: Leaked Globals
run: make -s leaked-globals
+ - uses: ./.github/actions/notify-slack
+ with:
+ status: ${{ job.status }}
+ matrix_name: ${{ matrix.test_task }}
+ committer_name: ${{ github.event.head_commit.committer.name }}
+ commit_message: ${{ github.event.head_commit.message }}
+ commit_timestamp: ${{ github.event.head_commit.timestamp }}
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure() && github.event_name == 'push'
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
index 8c2d3a2fd5..31fba17aac 100644
--- a/.github/workflows/ubuntu.yml
+++ b/.github/workflows/ubuntu.yml
@@ -45,16 +45,20 @@ jobs:
- name: configure
run: ./configure -C --disable-install-doc
- run: make $JOBS
- - name: make check
+ - name: Tests
run: make -s ${{ matrix.test_task }}
env:
TESTOPTS: "$JOBS -q --tty=no"
MSPECOPT: "-ff" # not using `-j` because sometimes `mspec -j` silently dies
- if: matrix.test_task == 'check'
- # TODO: Remove `continue-on-error` once they become stable and also we have a notification for their failure.
- - name: make test-bundler/test-bundled-gems
- run: make -s ${{ matrix.test_task }}
- if: matrix.test_task != 'check'
- continue-on-error: true
- name: Leaked Globals
run: make -s leaked-globals
+ - uses: ./.github/actions/notify-slack
+ with:
+ status: ${{ job.status }}
+ matrix_name: ${{ matrix.test_task }}
+ committer_name: ${{ github.event.head_commit.committer.name }}
+ commit_message: ${{ github.event.head_commit.message }}
+ commit_timestamp: ${{ github.event.head_commit.timestamp }}
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure() && github.event_name == 'push'
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index 984ac7011a..ae5d2e5451 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -53,3 +53,13 @@ jobs:
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\${{ matrix.vs }}\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
nmake ${{ matrix.test_task }}
+ - uses: ./.github/actions/notify-slack
+ with:
+ status: ${{ job.status }}
+ matrix_name: ${{ matrix.test_task }}
+ committer_name: ${{ github.event.head_commit.committer.name }}
+ commit_message: ${{ github.event.head_commit.message }}
+ commit_timestamp: ${{ github.event.head_commit.timestamp }}
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure() && github.event_name == 'push'