blob: 90be68533674e21840108ecf9f218a668a480889 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Compatibility Checks
# This GitHub Action aims to help to check the compatibility on the GCP
# Please provide the following data to run:
# 1. Secret.GCP_SERVICE_ACCOUNT_CREDENTIALS: The Key of the service account in Google Cloud. The account must have been granted to operate GCloud Storage and GCP machine instance.
# 2. GCloud project name: The name of the GCloud project, which use to create GCP under the project.
# 3. GCloud storage name: The name of the GCloud storage, which use to update the checker files and check the result of compatibility.
#
# This CI costs credit on Google Cloud, we only offer this for developers to run on your own environment.
on:
workflow_dispatch:
inputs:
gcloud-project:
description: 'Which project(ID) to create GCP?'
type: string
required: true
gcloud-storage:
description: 'Which GCloud Storage(Name) to storage compatibility result?'
type: string
required: true
jobs:
upload-checkers:
name: Upload checkers
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Set up Go 1.18
uses: actions/setup-go@v2
with:
go-version: 1.18
- id: 'auth'
uses: 'google-github-actions/auth@v1'
with:
credentials_json: '${{ secrets.GCP_SERVICE_ACCOUNT_CREDENTIALS }}'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v1'
- name: Build and Upload
run: |
# build skywalking rover binary
make container-btfgen build
cp bin/skywalking-rover-latest-linux-amd64 scripts/check/profiling
# build demo program
cd scripts/check/profiling
go build demo.go
mv demo demo-program
# upload to the gcloud
gcloud storage cp --project "${{ github.event.inputs.gcloud-project }}" ./* gs://${{ github.event.inputs.gcloud-storage }}/runner
checks:
name: Compatibility Checks
needs: [upload-checkers]
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
# following `gcloud compute images list`
system:
# ubuntu
- name: Ubuntu
project: ubuntu-os-cloud
family: ubuntu-1804-lts
image: ubuntu-1804-bionic-v20221201
- name: Ubuntu
project: ubuntu-os-cloud
family: ubuntu-2004-lts
image: ubuntu-2004-focal-v20221202
- name: Ubuntu
project: ubuntu-os-cloud
family: ubuntu-2204-lts
image: ubuntu-2204-jammy-v20221201
- name: Ubuntu
project: ubuntu-os-cloud
family: ubuntu-2210-amd64
image: ubuntu-2210-kinetic-amd64-v20221201
# ubuntu pro
- name: Ubuntu_Pro
project: ubuntu-os-pro-cloud
family: ubuntu-pro-1604-lts
image: ubuntu-pro-1604-xenial-v20221201
- name: Ubuntu_Pro
project: ubuntu-os-pro-cloud
family: ubuntu-pro-1804-lts
image: ubuntu-pro-1804-bionic-v20221201
- name: Ubuntu_Pro
project: ubuntu-os-pro-cloud
family: ubuntu-pro-2004-lts
image: ubuntu-pro-2004-focal-v20221202
- name: Ubuntu_Pro
project: ubuntu-os-pro-cloud
family: ubuntu-pro-2204-lts
image: ubuntu-pro-2204-jammy-v20221201
# centos
- name: Centos
project: centos-cloud
family: centos-7
image: centos-7-v20221102
- name: Centos
project: centos-cloud
family: centos-stream-8
image: centos-stream-8-v20221102
- name: Centos
project: centos-cloud
family: centos-stream-9
image: centos-stream-9-v20221102
# debian
- name: Debian
project: debian-cloud
family: debian-10
image: debian-10-buster-v20221102
- name: Debian
project: debian-cloud
family: debian-11
image: debian-11-bullseye-v20221102
# RHEL
- name: RHEL
project: rhel-cloud
family: rhel-7
image: rhel-7-v20221102
- name: RHEL
project: rhel-cloud
family: rhel-8
image: rhel-8-v20221102
- name: RHEL
project: rhel-cloud
family: rhel-9
image: rhel-9-v20221102
# rocky
- name: Rocky
project: rocky-linux-cloud
family: rocky-linux-8
image: rocky-linux-8-v20221102
- name: Rocky
project: rocky-linux-cloud
family: rocky-linux-9
image: rocky-linux-9-v20221102
# Fedora
- name: Fedora
project: fedora-cloud
family: fedora-cloud-34
image: fedora-cloud-base-gcp-34-1-2-x86-64
- name: Fedora
project: fedora-cloud
family: fedora-cloud-35
image: fedora-cloud-base-gcp-35-1-2-x86-64
- name: Fedora
project: fedora-cloud
family: fedora-cloud-36
image: fedora-cloud-base-gcp-36-20220506-n-0-x86-64
- name: Fedora
project: fedora-cloud
family: fedora-cloud-37
image: fedora-cloud-base-gcp-37-beta-1-5-x86-64
steps:
- uses: actions/checkout@v3
with:
submodules: true
- id: 'auth'
uses: 'google-github-actions/auth@v1'
with:
credentials_json: '${{ secrets.GCP_SERVICE_ACCOUNT_CREDENTIALS }}'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v1'
- name: Check
env:
INSTANCE_PROJECT: "${{ matrix.system.project }}"
INSTANCE_IMAGE: "${{ matrix.system.image }}"
INSTANCE_FAMILY: "${{ matrix.system.family }}"
INSTANCE_SYSTEM: "${{ matrix.system.name }}"
run: |
# download the runner
mkdir -p /tmp/runner
gcloud storage cp gs://${{ github.event.inputs.gcloud-storage }}/runner/* /tmp/runner
# create instance
gcloud compute instances create "skywalking-rover-test-$INSTANCE_IMAGE" --image "$INSTANCE_IMAGE" \
--project "${{ github.event.inputs.gcloud-project }}" --image-project "$INSTANCE_PROJECT" --machine-type e2-medium --zone us-west1-b
# generate the public ssh key
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -f ~/.ssh/google_compute_engine -q -N ""
# scp runner
gcloud compute scp --recurse /tmp/runner test@"skywalking-rover-test-$INSTANCE_IMAGE":/tmp/ \
--zone us-west1-b --project "${{ github.event.inputs.gcloud-project }}"
# run checker
gcloud compute ssh --zone "us-west1-b" "test@skywalking-rover-test-$INSTANCE_IMAGE" \
--project "${{ github.event.inputs.gcloud-project }}" \
--command "cd /tmp/runner; chmod +x /tmp/runner/demo-program /tmp/runner/skywalking-rover-latest-linux-amd64; sudo bash check.sh /tmp/runner/config.yaml /tmp/runner/demo-program /tmp/runner/skywalking-rover-latest-linux-amd64 /tmp/runner/result/$INSTANCE_SYSTEM/$INSTANCE_FAMILY json"
# scp from instance and upload to the storage
gcloud compute scp --recurse test@"skywalking-rover-test-$INSTANCE_IMAGE":/tmp/runner/result /tmp/runner \
--zone us-west1-b --project "${{ github.event.inputs.gcloud-project }}"
gcloud storage cp -r /tmp/runner/result gs://"${{ github.event.inputs.gcloud-storage }}"/ \
--project "${{ github.event.inputs.gcloud-project }}"
# delete test instance
gcloud compute instances delete --project "${{ github.event.inputs.gcloud-project }}" "skywalking-rover-test-$INSTANCE_IMAGE" --zone us-west1-b -q