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: push: branches: [ main, next, staging-* ] tags: [ v* ] jobs: build: runs-on: ubuntu-22.04 outputs: x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }} strategy: fail-fast: false matrix: target: [ 'cig_wf186h', 'cig_wf186w', 'cig_wf188n', 'cig_wf189', 'cig_wf196', 'cig_wf196', 'cybertan_eww631-a1', 'cybertan_eww631-b1', 'sonicfi_rap630w-312g', 'sonicfi_rap63xc-211g', 'sonicfi_rap630c-311g', 'sonicfi_rap630w-311g', 'sonicfi_rap630w-211g', 'sonicfi_rap650c', 'sonicfi_rap7110c-341x', 'sonicfi_rap750e-h', 'sonicfi_rap750w-311a', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_eap105', 'edgecore_eap111', 'edgecore_eap112', 'edgecore_oap101', 'edgecore_oap101-6e', 'edgecore_oap101e', 'edgecore_oap101e-6e', 'edgecore_oap103', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'hfcl_ion4x_3', 'hfcl_ion4xi_w', 'hfcl_ion4x_w', 'indio_um-305ax', 'senao_iap4300m', 'senao_iap2300m', 'senao_jeap6500', 'udaya_a6-id2', 'udaya_a6-od2', 'yuncore_ax820', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650', 'yuncore_fap655', 'emplus_wap588m' ] steps: - uses: actions/checkout@v3 # Clean unnecessary files to save disk space - name: clean unncessary files to save space run: | docker rmi `docker images -q` || true - 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 -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 -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 -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 "x64_vm_image_name=$(echo $IMG_NAME)" >> $GITHUB_OUTPUT fi trigger-testing: runs-on: ubuntu-22.04 needs: build if: startsWith(github.ref, 'refs/tags/v') steps: - name: Trigger testing of release uses: peter-evans/repository-dispatch@v1 with: token: ${{ secrets.WLAN_TESTING_PAT }} repository: Telecominfraproject/wlan-testing event-type: new-ap-release client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}' create-x64_vm-ami: runs-on: ubuntu-22.04 needs: build if: startsWith(github.ref, 'refs/tags/v') steps: - uses: actions/checkout@v3 - 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 }}