Skip to content

Notifications

Notifications #31

Workflow file for this run

name: "Notifications"
on:
push:
tags:
- 'export/**' # exclude patchew/** tags and branches
- 'export-net/**'
issues:
types: [opened, reopened, closed, assigned, unassigned]
workflow_run:
workflows: ["MPTCP Upstream Build Validation", "Update TopGit tree"]
types:
- completed
check_suite:
types:
- completed
env:
CURL_OPT: "--no-progress-meter --connect-timeout 30 --retry 20 --retry-delay 10"
CURL_ACC: "Accept: application/vnd.github.v3+json"
URI: "https://api.github.com"
PW: "https://patchwork.kernel.org/api/1.2"
permissions: {}
jobs:
tag:
name: "Tag"
if: github.repository_owner == 'multipath-tcp' && github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- name: tag shortner
id: tag
run: |
echo "tag=${REF:10}" >> ${GITHUB_OUTPUT}
env:
REF: ${{ github.event.ref }}
- name: irc tag
uses: rectalogic/notify-irc@v2
with:
server: irc.libera.chat
channel: "#mptcp-ci"
nickname: gh-tag-bot
verbose: true
message: "New tag available: ${{ steps.tag.outputs.tag }} (by ${{ github.actor }})"
issues:
name: "Issues"
if: github.repository_owner == 'multipath-tcp' && github.event_name == 'issues'
runs-on: ubuntu-latest
steps:
- name: issue info
id: info
if: github.event.action != 'opened'
run: |
echo "opener=, opened by ${OPENER}" >> ${GITHUB_OUTPUT}
echo "assignee=${ASSIGNEE:+ and assigned to ${ASSIGNEE}}" >> ${GITHUB_OUTPUT}
env:
OPENER: ${{ github.event.issue.user.login }}
ASSIGNEE: ${{ github.event.assignee.login }}
- name: irc issues
uses: rectalogic/notify-irc@v2
with:
server: irc.libera.chat
channel: "#mptcp"
nickname: gh-issues-bot
verbose: true
message: |-
Issue #${{ github.event.issue.number }} ("${{ github.event.issue.title }}"${{ steps.info.outputs.opener }}${{ steps.info.outputs.assignee }}) has been ${{ github.event.action }} by ${{ github.actor }}
${{ github.event.issue.html_url }}
build:
name: "Build"
if: github.repository_owner == 'multipath-tcp' && github.event_name == 'workflow_run' && github.event.workflow_run.name == 'MPTCP Upstream Build Validation'
runs-on: ubuntu-latest
steps:
- name: get linked tag
id: tag
run: |
TAG=$(curl ${CURL_OPT} -H "${CURL_ACC}" -H "${CURL_AUTH}" "${URL}" | jq -r ".[] | select(.object.sha == \"${SHA}\").ref" | tail -n1)
echo "Found: ${TAG} (${SHA} - ${BRANCH})"
TAG="${TAG:10}"
echo "tag=${TAG:-${BRANCH}}" >> ${GITHUB_OUTPUT}
env:
CURL_AUTH: "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
URL: "${{ env.URI }}/repos/${{ github.repository }}/git/matching-refs/tags/"
SHA: "${{ github.event.workflow_run.head_sha }}"
BRANCH: "${{ github.event.workflow_run.head_branch }}"
- name: irc build
if: startsWith(steps.tag.outputs.tag, 'export/') || startsWith(steps.tag.outputs.tag, 'export-net/')
uses: rectalogic/notify-irc@v2
with:
server: irc.libera.chat
channel: "#mptcp-ci"
nickname: gh-build-bot
verbose: true
message: |-
New build validating ${{ steps.tag.outputs.tag }} (by ${{ github.actor }}) ended with ${{ github.event.workflow_run.conclusion }}: ${{ github.event.workflow_run.html_url }}
build-error:
name: "Build Error"
if: github.repository_owner == 'multipath-tcp' && github.event_name == 'workflow_run' && github.event.workflow_run.name == 'MPTCP Upstream Build Validation' && github.event.workflow_run.conclusion != 'success'
runs-on: ubuntu-latest
steps:
- name: get linked tag
id: tag
run: |
TAG=$(curl ${CURL_OPT} -H "${CURL_ACC}" -H "${CURL_AUTH}" "${URL}" | jq -r ".[] | select(.object.sha == \"${SHA}\").ref" | tail -n1)
echo "Found: ${TAG} (${SHA} - ${BRANCH})"
TAG="${TAG:10}"
echo "tag=${TAG:-${BRANCH}}" >> ${GITHUB_OUTPUT}
env:
CURL_AUTH: "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
URL: "${{ env.URI }}/repos/${{ github.repository }}/git/matching-refs/tags/"
SHA: "${{ github.event.workflow_run.head_sha }}"
BRANCH: "${{ github.event.workflow_run.head_branch }}"
- name: irc build
if: startsWith(steps.tag.outputs.tag, 'export/') || startsWith(steps.tag.outputs.tag, 'export-net/')
uses: rectalogic/notify-irc@v2
with:
server: irc.libera.chat
channel: "#mptcp"
nickname: gh-build-bot
verbose: true
message: |-
New build validating ${{ steps.tag.outputs.tag }} (by ${{ github.actor }}) failed: ${{ github.event.workflow_run.conclusion }}: ${{ github.event.workflow_run.html_url }}
- name: get commit info
if: startsWith(steps.tag.outputs.tag, 'patchew/')
id: commit
run: |
curl ${CURL_OPT} -H "${CURL_ACC}" -H "${CURL_AUTH}" "${URL}" > commit.json
read -r TAG MID < <(jq -r '.message' commit.json | grep "^Message-Id: " | tail -n1)
echo "Found message ID: '${TAG}' '${MID}'"
echo "mid=${MID:1:-1}" >> ${GITHUB_OUTPUT}
SUBJECT=$(jq -r '.message' commit.json | head -n1)
echo "Found subject: '${SUBJECT}'"
echo "subject=${SUBJECT}" >> ${GITHUB_OUTPUT}
NAME=$(jq -r '.author.name' commit.json)
EMAIL=$(jq -r '.author.email' commit.json)
echo "Found author: '${NAME}' '${EMAIL}'"
echo "name=${NAME%% *}" >> ${GITHUB_OUTPUT}
echo "author=${NAME} <${EMAIL}>" >> ${GITHUB_OUTPUT}
SHA="${{ github.event.workflow_run.head_sha }}"
echo "sha=${SHA:0:12}" >> ${GITHUB_OUTPUT}
env:
CURL_AUTH: "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
URL: "${{ env.URI }}/repos/${{ github.repository }}/git/commits/${{ github.event.workflow_run.head_sha }}"
- name: send email
if: startsWith(steps.tag.outputs.tag, 'patchew/')
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
to: ${{ steps.commit.outputs.author }}
cc: mptcp@lists.linux.dev
from: MPTCP CI
reply_to: mptcp@lists.linux.dev
in_reply_to: "<${{ steps.commit.outputs.mid }}>"
subject: "Re: ${{ steps.commit.outputs.subject }}: Build Failure"
body: |
Hi ${{ steps.commit.outputs.name }},
Thank you for your modifications, that's great!
But sadly, our CI spotted some issues with it when trying to build it.
You can find more details there:
https://patchwork.kernel.org/project/mptcp/patch/${{ steps.commit.outputs.mid }}/
${{ github.event.workflow_run.html_url }}
Status: ${{ github.event.workflow_run.conclusion }}
Initiator: ${{ github.actor }}
Commits: https://github.com/${{ github.repository }}/commits/${{ steps.commit.outputs.sha }}
Feel free to reply to this email if you cannot access logs, if you need
some support to fix the error, if this doesn't seem to be caused by your
modifications or if the error is a false positive one.
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
topgit:
name: "TopGit"
if: github.repository_owner == 'multipath-tcp' && github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Update TopGit tree' && github.event.workflow_run.conclusion != 'success'
runs-on: ubuntu-latest
steps:
- name: irc topgit
uses: rectalogic/notify-irc@v2
with:
server: irc.libera.chat
channel: "#mptcp"
nickname: gh-topgit-bot
verbose: true
message: |-
New sync with latest net-next failed (initiated by ${{ github.actor }}): ${{ github.event.workflow_run.conclusion }}: ${{ github.event.workflow_run.html_url }}
tests:
name: "Tests"
if: github.repository_owner == 'multipath-tcp' && github.event_name == 'check_suite' && github.event.check_suite.app.name == 'Cirrus CI' && github.event.check_suite.conclusion != 'neutral' && github.event.check_suite.conclusion != 'skipped'
runs-on: ubuntu-latest
steps:
- name: get linked tag
id: tag
run: |
TAG=$(curl ${CURL_OPT} -H "${CURL_ACC}" -H "${CURL_AUTH}" "${URL}" | jq -r ".[] | select(.object.sha == \"${SHA}\").ref" | tail -n1)
echo "Found: ${TAG} (${SHA})"
echo "tag=${TAG:10}" >> ${GITHUB_OUTPUT}
env:
CURL_AUTH: "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
URL: "${{ env.URI }}/repos/${{ github.repository }}/git/matching-refs/tags/"
SHA: "${{ github.event.check_suite.head_sha }}"
# inspired by: https://cirrus-ci.org/guide/notifications/
- name: get cirrus status
id: cirrus
run: |
curl ${CURL_OPT} -H "${CURL_ACC}" -H "${CURL_AUTH}" "${URL}" > check-runs.json
jq -r '.check_runs[] | select(.conclusion != "neutral")' check-runs.json > check-runs_strip.json
i=0
for id in $(jq -r '.external_id' check-runs_strip.json); do
echo "${i}: Found ID: ${id}"
url_base="https://api.cirrus-ci.com/v1/artifact/task/${id}"
url_ccl="${url_base}/conclusion/conclusion.txt"
url_sum="${url_base}/summary/summary.txt"
ccl="$(curl ${CURL_OPT} "${url_ccl}" || echo "${i}: Unable to get the conclusion")"
echo "ccl_${i}=${ccl}" >> ${GITHUB_OUTPUT}
echo "ccl_title_${i}=$(echo "${ccl}" | cut -d: -f1-2)" >> ${GITHUB_OUTPUT}
echo "ccl_status_${i}=$(echo "${ccl}" | cut -d: -f3- | sed 's/^ //')" >> ${GITHUB_OUTPUT}
echo "sum_${i}=${url_sum}" >> ${GITHUB_OUTPUT}
i=$((i+1))
done
i=0
for url in $(jq -r '.details_url' check-runs_strip.json); do
echo "${i}: URL: ${url}"
echo "url_${i}=${url}" >> ${GITHUB_OUTPUT}
i=$((i+1))
done
# extra debug if nothing was found
if [ ${i} -eq 0 ]; then
jq '.' check-runs.json
jq '.' check-runs_strip.json
fi
env:
CURL_AUTH: "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
URL: "${{ env.URI }}/repos/${{ github.repository }}/check-suites/${{ github.event.check_suite.id }}/check-runs?status=completed"
- name: irc tests
if: startsWith(steps.tag.outputs.tag, 'export/') || startsWith(steps.tag.outputs.tag, 'export-net/')
uses: rectalogic/notify-irc@v2
with:
server: irc.libera.chat
channel: "#mptcp-ci"
nickname: gh-tests-bot
verbose: true
message: |-
New Cirrus CI Tests job validating ${{ steps.tag.outputs.tag }} (by ${{ github.actor }}) just ended:
- ${{ steps.cirrus.outputs.ccl_0 }}: ${{ steps.cirrus.outputs.url_0 }}
- ${{ steps.cirrus.outputs.ccl_1 }}: ${{ steps.cirrus.outputs.url_1 }}
- name: get commit info
if: startsWith(steps.tag.outputs.tag, 'patchew/')
id: commit
run: |
curl ${CURL_OPT} -H "${CURL_ACC}" -H "${CURL_AUTH}" "${URL}" > commit.json
read -r TAG MID < <(jq -r '.message' commit.json | grep "^Message-Id: " | tail -n1)
echo "Found message ID: '${TAG}' '${MID}'"
echo "mid=${MID:1:-1}" >> ${GITHUB_OUTPUT}
SUBJECT=$(jq -r '.message' commit.json | head -n1)
echo "Found subject: '${SUBJECT}'"
echo "subject=${SUBJECT}" >> ${GITHUB_OUTPUT}
NAME=$(jq -r '.author.name' commit.json)
EMAIL=$(jq -r '.author.email' commit.json)
echo "Found author: '${NAME}' '${EMAIL}'"
echo "name=${NAME%% *}" >> ${GITHUB_OUTPUT}
echo "author=${NAME} <${EMAIL}>" >> ${GITHUB_OUTPUT}
SHA="${{ github.event.check_suite.head_sha }}"
echo "sha=${SHA:0:12}" >> ${GITHUB_OUTPUT}
COMMITTER=$(jq -r '.committer.name' commit.json)
echo "Found committer: '${COMMITTER}'"
echo "committer=${COMMITTER}" >> ${GITHUB_OUTPUT}
env:
CURL_AUTH: "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}"
URL: "${{ env.URI }}/repos/${{ github.repository }}/git/commits/${{ github.event.check_suite.head_sha }}"
- name: send email
if: startsWith(steps.tag.outputs.tag, 'patchew/')
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
to: ${{ steps.commit.outputs.author }}
cc: mptcp@lists.linux.dev
from: MPTCP CI
reply_to: mptcp@lists.linux.dev
in_reply_to: "<${{ steps.commit.outputs.mid }}>"
subject: "Re: ${{ steps.commit.outputs.subject }}: Tests Results"
body: |
Hi ${{ steps.commit.outputs.name }},
Thank you for your modifications, that's great!
Our CI (Cirrus) did some validations with a debug kernel and here is its report:
- ${{ steps.cirrus.outputs.ccl_title_0 }}:
- ${{ steps.cirrus.outputs.ccl_status_0 }}:
- Task: ${{ steps.cirrus.outputs.url_0 }}
- Summary: ${{ steps.cirrus.outputs.sum_0 }}
- ${{ steps.cirrus.outputs.ccl_title_1 }}:
- ${{ steps.cirrus.outputs.ccl_status_1 }}:
- Task: ${{ steps.cirrus.outputs.url_1 }}
- Summary: ${{ steps.cirrus.outputs.sum_1 }}
Initiator: ${{ steps.commit.outputs.committer }}
Commits: https://github.com/${{ github.repository }}/commits/${{ steps.commit.outputs.sha }}
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-debug
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
- name: set patchwork check
if: startsWith(steps.tag.outputs.tag, 'patchew/')
run: |
CHECK_URLS=()
set_url() { local series_url
series_url=$(curl ${CURL_OPT} "${URL}" | jq -r 'last(last(.[].series)[].url)')
if [ -z "${series_url}" ] || [ "${series_url}" = "null" ]; then
echo "Series not found: '${series_url}' '${URL}'"
return 1
fi
echo "Found Series: '${series_url}'"
readarray -t CHECK_URLS < <(curl ${CURL_OPT} "${series_url}" | jq -r '.patches[].url + "checks/"')
}
# $1: title, $2: status, $3: url
submit() { local check_url
if [[ "${2}" == "Success"* ]]; then
STATE="success"
elif [[ "${2}" == "Unstable"* ]]; then
STATE="warning"
else
STATE="fail"
fi
for check_url in "${CHECK_URLS[@]}"; do
curl ${CURL_OPT} \
-X POST \
-H "Authorization: Token ${{ secrets.PW_TOKEN }}" \
-F "state=${STATE}" \
-F "target_url=${3}" \
-F "context=${1//[ :()]/_}" \
-F "description=${2}" \
"${check_url}" | jq '.'
done
}
for i in $(seq 30); do # patches can take a bit of time to appear
set_url && break
sleep 1m
done
if [ "${#CHECK_URLS[@]}" -eq 0 ]; then
echo "Error: didn't find any URLs after ${i} attempts"
exit 1
fi
echo "Found: ${#CHECK_URLS[@]} urls after ${i} attempts: ${CHECK_URLS[@]}"
submit "${{ steps.cirrus.outputs.ccl_title_0 }}" "${{ steps.cirrus.outputs.ccl_status_0 }}" "${{ steps.cirrus.outputs.url_0 }}"
submit "${{ steps.cirrus.outputs.ccl_title_1 }}" "${{ steps.cirrus.outputs.ccl_status_1 }}" "${{ steps.cirrus.outputs.url_1 }}"
env:
URL: "${{ env.PW }}/patches/?project=mptcp&msgid=${{ steps.commit.outputs.mid }}"