Skip to content

#1797 - 7f617d9b-19c2-4869-8bbf-3b13d9fd2202 #102

#1797 - 7f617d9b-19c2-4869-8bbf-3b13d9fd2202

#1797 - 7f617d9b-19c2-4869-8bbf-3b13d9fd2202 #102

Workflow file for this run

name: '[CI] Manual'
run-name: "#${{ inputs.pr_number }} - ${{ inputs.uuid }}"
on:
workflow_dispatch:
inputs:
requester:
required: true
type: string
comment_url:
required: true
type: string
uuid:
required: true
type: string
pr_number:
required: true
type: string
git_sha:
required: true
type: string
goal:
required: true
type: choice
default: "test"
options:
- "build"
- "test"
os_distros:
description: 'Operating System Distributions (comma-separated, e.g., al2,al2023)'
default: "al2,al2023"
required: false
type: string
k8s_versions:
description: 'Kubernetes Versions (comma-separated, e.g., 1.21,1.22)'
default: "1.21,1.22,1.23,1.24,1.25,1.26,1.27,1.28,1.29,1.30"
required: false
type: string
build_arguments:
required: false
type: string
jobs:
setup:
runs-on: ubuntu-latest
outputs:
git_sha_short: ${{ steps.variables.outputs.git_sha_short }}
workflow_run_url: ${{ steps.variables.outputs.workflow_run_url }}
kubernetes_versions: ${{ steps.variables.outputs.kubernetes_versions }}
build_id: ${{ steps.variables.outputs.build_id }}
ci_step_name_prefix: ${{ steps.variables.outputs.ci_step_name_prefix }}
os_distros: ${{ steps.variables.outputs.os_distros }}
steps:
- id: variables
run: |
echo "git_sha_short=$(echo ${{ inputs.git_sha }} | rev | cut -c-7 | rev)" >> $GITHUB_OUTPUT
echo "workflow_run_url=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_OUTPUT
echo "build_id=ci-${{ inputs.pr_number }}-${{ needs.setup.outputs.git_sha_short }}-${{ inputs.uuid }}" >> $GITHUB_OUTPUT
echo 'ci_step_name_prefix=CI:' >> $GITHUB_OUTPUT
echo "kubernetes_versions=$(jq -Rn --arg input '${{ inputs.k8s_versions }}' '($input | split(","))' | jq -c .)" >> $GITHUB_OUTPUT
echo "os_distros=$(jq -Rn --arg input '${{ inputs.os_distros }}' '($input | split(","))' | jq -c .)" >> $GITHUB_OUTPUT
notify-start:
runs-on: ubuntu-latest
needs:
- setup
steps:
- uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: ${{ inputs.pr_number }},
body: `@${{ inputs.requester }} roger [that](${{ inputs.comment_url }})! I've dispatched a [workflow](${{ needs.setup.outputs.workflow_run_url }}). 👍`
});
kubernetes-versions:
runs-on: ubuntu-latest
name: ${{ matrix.k8s_version }} / ${{ matrix.os_distro }}
needs:
- setup
- notify-start
permissions:
id-token: write
contents: read
strategy:
# don't bail out of all sub-tasks if one fails
fail-fast: false
matrix:
k8s_version: ${{ fromJson(needs.setup.outputs.kubernetes_versions) }}
os_distro: ${{ fromJson(needs.setup.outputs.os_distros) }}
# al2023 is not supporting 1.22 and below, exclude them from CI
exclude:
- os_distro: al2023
k8s_version: 1.21
- os_distro: al2023
k8s_version: 1.22
steps:
- uses: actions/checkout@v3
with:
ref: 'main'
- uses: aws-actions/configure-aws-credentials@v2
with:
aws-region: ${{ secrets.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_ROLE_ARN_CI }}
# 2.5 hours (job usually completes within 2 hours)
role-duration-seconds: 9000
- name: "${{ needs.setup.outputs.ci_step_name_prefix }} Build"
id: build
uses: ./.github/actions/ci/build
with:
git_sha: ${{ inputs.git_sha }}
k8s_version: ${{ matrix.k8s_version }}
os_distro: ${{ matrix.os_distro }}
build_id: ${{ needs.setup.outputs.build_id }}
additional_arguments: ${{ inputs.build_arguments }}
- if: ${{ inputs.goal == 'test' }}
name: "${{ needs.setup.outputs.ci_step_name_prefix }} Test"
id: test
uses: ./.github/actions/ci/kubetest2
with:
ami_id: ${{ steps.build.outputs.ami_id }}
k8s_version: ${{ matrix.k8s_version }}
os_distro: ${{ matrix.os_distro }}
build_id: ${{ needs.setup.outputs.build_id }}
aws_region: ${{ secrets.AWS_REGION }}
notify-outcome:
if: ${{ always() }}
runs-on: ubuntu-latest
needs:
- setup
- kubernetes-versions
steps:
- uses: actions/github-script@v6
with:
script: |
const { data } = await github.rest.actions.listJobsForWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.runId
});
const conclusionEmojis = {
"success": "✅",
"skipped": "⏭️",
"failure": "❌",
"cancelled": "🚮"
};
const uniqueStepNames = new Set();
const stepConclusionsByJob = new Map();
const ciStepNamePrefix = "${{ needs.setup.outputs.ci_step_name_prefix }}";
for (const job of data.jobs) {
if (/^\d+\.\d+/.test(job.name)) {
for (const step of job.steps) {
if (step.name.startsWith(ciStepNamePrefix)) {
const stepName = step.name.substring(ciStepNamePrefix.length).trim();
let stepConclusions = stepConclusionsByJob.get(job.name);
if (!stepConclusions) {
stepConclusions = new Map();
stepConclusionsByJob.set(job.name, stepConclusions);
}
stepConclusions.set(stepName, step.conclusion);
uniqueStepNames.add(stepName);
}
}
}
}
const headers = [{
data: 'AMI variant',
header: true
}];
for (const stepName of uniqueStepNames.values()) {
headers.push({
data: stepName,
header: true
});
}
const rows = [];
for (const stepConclusionsForJob of [...stepConclusionsByJob.entries()].sort()) {
const job = stepConclusionsForJob[0];
const row = [job];
for (const step of stepConclusionsForJob[1].entries()) {
row.push(`${step[1]} ${conclusionEmojis[step[1]]}`);
}
rows.push(row);
}
const commentBody = core.summary
.addRaw("@${{ inputs.requester }} the <a href=${{ needs.setup.outputs.workflow_run_url }}>workflow</a> that you <a href=${{ inputs.comment_url }}>requested</a> has completed. 🎉")
.addTable([
headers,
...rows,
])
.stringify();
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: ${{ inputs.pr_number }},
body: commentBody
});