1+ # shellcheck disable=SC1000-SC9999
2+ name : Continuous Integration
3+
4+ on :
5+ workflow_call :
6+ secrets :
7+ AWS_REGION :
8+ required : true
9+ AWS_ACCESS_KEY_ID :
10+ required : true
11+ AWS_SECRET_ACCESS_KEY :
12+ required : true
13+ AWS_SECURITY_GROUP_ID :
14+ required : true
15+ AMI_ID :
16+ required : true
17+ GH_SELF_HOSTED_RUNNER_TOKEN :
18+ required : true
19+
20+ permissions :
21+ contents : read
22+
23+ jobs :
24+ setup-runner :
25+ name : GitHub Actions Test create instance
26+ runs-on : ubuntu-latest
27+ outputs :
28+ instance_id : ${{ steps.create-runner.outputs.instance_id }}
29+ runner_name : ${{ steps.create-runner.outputs.runner_name }}
30+ steps :
31+ - name : Checkout
32+ id : checkout
33+ uses : actions/checkout@v4
34+
35+ - name : Test Local Action
36+ id : create-runner
37+ uses : ./
38+ with :
39+ action : " create"
40+ aws_region : ${{ secrets.AWS_REGION }}
41+ github_token : ${{ secrets.GH_SELF_HOSTED_RUNNER_TOKEN }}
42+ aws_access_key_id : ${{ secrets.AWS_ACCESS_KEY_ID }}
43+ aws_secret_access_key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
44+ security_group_id : ${{ secrets.AWS_SECURITY_GROUP_ID }}
45+ github_repo : ${{ github.repository }}
46+ ami_id : ${{ secrets.AMI_ID }}
47+ instance_type : " i3.metal"
48+ create_s3_bucket : " false"
49+ spot_instance_only : " true"
50+
51+ - name : Print Output
52+ id : output
53+ run : |
54+ echo "instance_id ${{ steps.create-runner.outputs.instance_id }}"
55+ echo "instance_ip ${{ steps.create-runner.outputs.instance_ip }}"
56+ echo "runner_name ${{ steps.create-runner.outputs.runner_name }}"
57+ echo "bucket_name ${{ steps.create-runner.outputs.bucket_name }}"
58+
59+ test-runner :
60+ needs : setup-runner
61+ runs-on : [self-hosted, linux, x64]
62+ steps :
63+ - name : Checkout
64+ uses : actions/checkout@v4
65+
66+ - name : Install Docker
67+ id : docker
68+ run : |
69+ # Add Docker's official GPG key:
70+ apt-get update -y
71+ apt-get install ca-certificates curl gnupg -y
72+ install -m 0755 -d /etc/apt/keyrings
73+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
74+ chmod a+r /etc/apt/keyrings/docker.gpg
75+ # Add the repository to Apt sources:
76+ echo \
77+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
78+ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
79+ tee /etc/apt/sources.list.d/docker.list > /dev/null
80+ apt-get update -y
81+ apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
82+ docker info
83+
84+ - name : install make and tooling for libbpf
85+ id : dependency
86+ run : |
87+ apt-get install -y binutils-dev build-essential
88+ apt-get install -y pkg-config
89+ env
90+
91+ - name : use Kepler action to deploy cluster
92+ uses : sustainable-computing-io/kepler-action@main
93+ with :
94+ ebpfprovider : libbpf
95+ cluster_provider : kind
96+ prometheus_enable : true
97+ tekton_enable : true
98+
99+ - name : Run Tests
100+ run : |
101+ export INSTANCE_ID="${{ needs.setup-runner.outputs.instance_id }}"
102+ echo "Running tests on self-hosted runner with instance ${INSTANCE_ID}"
103+ uname -a # or any other command
104+ cat /etc/os-release
105+ cat /proc/cpuinfo
106+ kind get kubeconfig --name=kind > /tmp/kubeconfig
107+ kubectl get po --all-namespaces --kubeconfig=/tmp/kubeconfig
108+
109+ destroy-runner :
110+ if : always()
111+ name : GitHub Actions Test destroy instance
112+ needs : [setup-runner, test-runner]
113+ runs-on : ubuntu-latest
114+ steps :
115+ - name : Checkout
116+ id : checkout
117+ uses : actions/checkout@v4
118+
119+ - name : unregister runner
120+ id : unregister
121+ uses : ./
122+ with :
123+ action : " unregister"
124+ runner_name : ${{ needs.setup-runner.outputs.runner_name }}
125+ github_token : ${{ secrets.GH_SELF_HOSTED_RUNNER_TOKEN }}
126+ github_repo : ${{ github.repository }}
127+
128+ - name : terminate instance
129+ id : terminate
130+ uses : ./
131+ with :
132+ action : " terminate"
133+ aws_access_key_id : ${{ secrets.AWS_ACCESS_KEY_ID }}
134+ aws_secret_access_key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
135+ instance_id : ${{ needs.setup-runner.outputs.instance_id }}
136+
0 commit comments