mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-18 09:51:26 +00:00
x86: add CI workflows
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
This commit is contained in:
parent
efde86be9d
commit
dfeddc0d89
39
.github/actions/create-ami-from-image/action.yml
vendored
Normal file
39
.github/actions/create-ami-from-image/action.yml
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
name: Create AMI from firmware image in S3 bucket
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
firmware_image_name:
|
||||||
|
description: Name of the firmware image
|
||||||
|
required: true
|
||||||
|
firmware_image_s3_bucket:
|
||||||
|
description: Name of the S3 bucket where the image resides
|
||||||
|
required: true
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Import snapshot based on firmware image
|
||||||
|
id: import_snapshot
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo ::set-output name=import_task_id::$(aws ec2 import-snapshot --description '${{ inputs.firmware_image_name }}' --disk-container 'Format=raw,UserBucket={S3Bucket=${{ inputs.firmware_image_s3_bucket }},S3Key=${{ inputs.firmware_image_name }}}' | jq -r '.ImportTaskId')
|
||||||
|
|
||||||
|
- name: Wait for import task to complete and get snapshot ID
|
||||||
|
id: get_snapshot_id
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
IMPORT_TASK_STATUS=""
|
||||||
|
while [[ $IMPORT_TASK_STATUS != 'completed' ]]; do
|
||||||
|
IMPORT_TASK_STATUS=$(aws ec2 describe-import-snapshot-tasks --import-task-ids ${{ steps.import_snapshot.outputs.import_task_id }} | jq -r '.ImportSnapshotTasks[].SnapshotTaskDetail.Status')
|
||||||
|
echo "Import task status is $IMPORT_TASK_STATUS, waiting for completion."
|
||||||
|
done
|
||||||
|
echo ::set-output name=id::$(aws ec2 describe-import-snapshot-tasks --import-task-ids ${{ steps.import_snapshot.outputs.import_task_id }} | jq -r '.ImportSnapshotTasks[].SnapshotTaskDetail.SnapshotId')
|
||||||
|
|
||||||
|
- name: Tag snapshot with image name
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
aws ec2 create-tags --resources ${{ steps.get_snapshot_id.outputs.id }} --tags 'Key=Name,Value=${{ inputs.firmware_image_name }}'
|
||||||
|
|
||||||
|
- name: Register AMI based on snapshot
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
aws ec2 register-image --name '${{ inputs.firmware_image_name }}' --root-device-name /dev/xvda --block-device-mappings 'DeviceName=/dev/xvda,Ebs={SnapshotId=${{ steps.get_snapshot_id.outputs.id }}}'
|
||||||
36
.github/workflows/build-dev.yml
vendored
36
.github/workflows/build-dev.yml
vendored
@ -1,5 +1,13 @@
|
|||||||
name: Build OpenWrt/uCentral images
|
name: Build OpenWrt/uCentral images
|
||||||
|
|
||||||
|
env:
|
||||||
|
AWS_DEFAULT_OUTPUT: json
|
||||||
|
AWS_DEFAULT_REGION: us-east-1
|
||||||
|
AWS_S3_BUCKET_NAME: ucentral-ap-firmware
|
||||||
|
AWS_ACCOUNT_ID: ${{ secrets.UCENTRAL_S3_ACCOUNT_ID }}
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_SECRET }}
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main, next, staging-* ]
|
branches: [ main, next, staging-* ]
|
||||||
@ -8,10 +16,12 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf610d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ]
|
target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf610d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4', 'x64_vm' ]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@ -24,17 +34,12 @@ jobs:
|
|||||||
make -j TARGET=${{ matrix.target }}
|
make -j TARGET=${{ matrix.target }}
|
||||||
|
|
||||||
- name: Package and upload image for ${{ matrix.target }}
|
- name: Package and upload image for ${{ matrix.target }}
|
||||||
|
id: package_and_upload_image
|
||||||
env:
|
env:
|
||||||
GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
|
GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
|
||||||
GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
|
GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
|
||||||
ARTIFACTORY_USERNAME: cicd-indoor-main
|
ARTIFACTORY_USERNAME: cicd-indoor-main
|
||||||
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
||||||
AWS_S3_BUCKET_NAME: ucentral-ap-firmware
|
|
||||||
AWS_DEFAULT_OUTPUT: json
|
|
||||||
AWS_DEFAULT_REGION: us-east-1
|
|
||||||
AWS_ACCOUNT_ID: ${{ secrets.UCENTRAL_S3_ACCOUNT_ID }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_SECRET }}
|
|
||||||
run: |
|
run: |
|
||||||
LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
|
LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
|
||||||
HASH=$(git rev-parse --short HEAD)
|
HASH=$(git rev-parse --short HEAD)
|
||||||
@ -66,6 +71,10 @@ jobs:
|
|||||||
[ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
|
[ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
|
||||||
[ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$JSON_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
|
[ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$JSON_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
|
||||||
|
|
||||||
|
if [ ${{ matrix.target }} == 'x64_vm' ]; then
|
||||||
|
echo ::set-output name=x64_vm_image_name::"$(echo $IMG_NAME)"
|
||||||
|
fi
|
||||||
|
|
||||||
trigger-testing:
|
trigger-testing:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: build
|
needs: build
|
||||||
@ -78,3 +87,16 @@ jobs:
|
|||||||
repository: Telecominfraproject/wlan-testing
|
repository: Telecominfraproject/wlan-testing
|
||||||
event-type: new-ap-release
|
event-type: new-ap-release
|
||||||
client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}'
|
client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}'
|
||||||
|
|
||||||
|
create-x64_vm-ami:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Use create-ami-from-image composite action
|
||||||
|
uses: ./.github/actions/create-ami-from-image
|
||||||
|
with:
|
||||||
|
firmware_image_name: ${{ needs.build.outputs.x64_vm_image_name }}
|
||||||
|
firmware_image_s3_bucket: ${{ env.AWS_S3_BUCKET_NAME }}
|
||||||
|
|||||||
80
.github/workflows/x64_vm-build-test.yml
vendored
80
.github/workflows/x64_vm-build-test.yml
vendored
@ -1,10 +1,88 @@
|
|||||||
name: Test x64_vm build and AMI creation
|
name: Test x64_vm build and AMI creation
|
||||||
|
|
||||||
|
env:
|
||||||
|
AWS_DEFAULT_OUTPUT: json
|
||||||
|
AWS_DEFAULT_REGION: us-east-1
|
||||||
|
AWS_S3_BUCKET_NAME: ucentral-ap-firmware
|
||||||
|
AWS_ACCOUNT_ID: ${{ secrets.UCENTRAL_S3_ACCOUNT_ID }}
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_SECRET }}
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: ['x64_vm']
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- run: echo 'Test x64_vm build and AMI creation'
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Build image for ${{ matrix.target }}
|
||||||
|
id: build
|
||||||
|
run: |
|
||||||
|
git config --global user.email "you@example.com"
|
||||||
|
git config --global user.name "Your Name"
|
||||||
|
make -j TARGET=${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Package and upload image for ${{ matrix.target }}
|
||||||
|
id: package_and_upload_image
|
||||||
|
env:
|
||||||
|
GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
|
||||||
|
GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
|
||||||
|
ARTIFACTORY_USERNAME: cicd-indoor-main
|
||||||
|
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
|
||||||
|
HASH=$(git rev-parse --short HEAD)
|
||||||
|
|
||||||
|
if [[ ${GITHUB_REF} == "refs/heads/"* ]]
|
||||||
|
then
|
||||||
|
REF=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')
|
||||||
|
IS_RELEASE="false"
|
||||||
|
else
|
||||||
|
REF=$(echo ${GITHUB_REF#refs/tags/} | tr '/' '-')
|
||||||
|
IS_RELEASE="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
BASENAME="$(date +%Y%m%d)-$LOWERCASE_TARGET-$REF-$HASH"
|
||||||
|
TAR_NAME="$BASENAME.tar.gz"
|
||||||
|
IMG_NAME="$BASENAME-upgrade.bin";
|
||||||
|
JSON_NAME="$BASENAME.json";
|
||||||
|
|
||||||
|
tar cfz "$TAR_NAME" -C openwrt/bin/targets/ .
|
||||||
|
curl -s -u $GH_BUILD_USERNAME:$GH_BUILD_PASSWORD -T "$TAR_NAME" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/$LOWERCASE_TARGET/"$TAR_NAME""
|
||||||
|
IMG_NAME="$BASENAME-upgrade.bin";
|
||||||
|
TIP_VERSION="$(grep DISTRIB_TIP= openwrt/tmp/openwrt_release | cut -d\' -f2)"
|
||||||
|
echo -e "{\n\t\"image\":\""${IMG_NAME}"\",\n\t\"revision\": \""${TIP_VERSION}"\",\n\t\"timestamp\":\""$(date +%s)"\",\n\t\"compatible\": \""${LOWERCASE_TARGET}"\"\n}" > latest-upgrade.json
|
||||||
|
[ -f openwrt/tmp/image-file ] && curl -s -u $GH_BUILD_USERNAME:$GH_BUILD_PASSWORD -T "openwrt/$(cat openwrt/tmp/image-file)" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/$LOWERCASE_TARGET/"$IMG_NAME""
|
||||||
|
[ -f openwrt/tmp/image-file ] && curl -s -u $GH_BUILD_USERNAME:$GH_BUILD_PASSWORD -T "latest-upgrade.json" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/$LOWERCASE_TARGET/latest-upgrade.json"
|
||||||
|
|
||||||
|
[ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/octet-stream" "openwrt/$(cat openwrt/tmp/image-file)" "s3://$AWS_S3_BUCKET_NAME/$IMG_NAME"
|
||||||
|
[ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$IMG_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
|
||||||
|
[ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
|
||||||
|
[ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$JSON_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
|
||||||
|
|
||||||
|
if [[ ${{ matrix.target }} == 'x64_vm' ]]; then
|
||||||
|
echo ::set-output name=x64_vm_image_name::"$(echo $IMG_NAME)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
create-x64_vm-ami:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
ref: WIFI-7206-add-workflow-to-build-virtual-ap-image
|
||||||
|
|
||||||
|
- name: Use create-ami-from-image composite action
|
||||||
|
uses: ./.github/actions/create-ami-from-image
|
||||||
|
with:
|
||||||
|
firmware_image_name: ${{ needs.build.outputs.x64_vm_image_name }}
|
||||||
|
firmware_image_s3_bucket: ${{ env.AWS_S3_BUCKET_NAME }}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user