diff --git a/.github/workflows/release-github.yml b/.github/workflows/release-github.yml index 4332295a8..68f1ec28e 100644 --- a/.github/workflows/release-github.yml +++ b/.github/workflows/release-github.yml @@ -1,39 +1,29 @@ -name: Release to GitHub and NPM +name: Build & Compile CPP SDK on: workflow_dispatch: - push: - branches: - - 'main' - - 'next' - - 'next-major' - - 'proposed' - pull_request: - types: [opened, synchronize] - branches: - - 'next' - - 'proposed' + env: HUSKY: 0 + jobs: - release: - name: Release + build-and-compile: + name: Build & Compile CPP SDK runs-on: ubuntu-22.04 + steps: - # Checkout/install project - - name: Checkout + - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - repo-token: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }} - persist-credentials: false - # Install Node.js - - name: Setup Node.js + - name: Setup node uses: actions/setup-node@v4 with: - node-version: 'lts/*' + node-version: '20' + + - name: Install node modules + run: npm ci - # Install C++ dependencies - name: Install C++ dependencies run: | sudo apt-get update @@ -65,86 +55,50 @@ jobs: sudo \ ninja-build \ dpkg + + - name: Add toolchain for GCC 9 + run: add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update - # Install jsonref - - name: Install jsonref - run: pip3 install jsonref - - - name: Set up NPM token - env: - NPM_TOKEN: ${{ secrets.SEMANTIC_RELEASE_NPM_TOKEN }} # <-- allow npm publish for each workspace - run: 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc' - - - name: Install dependencies - run: npm ci - - # Set NPM_DIST_TAGS and DOCS_TAG if applicable based on branch - - name: Set main tags - if: github.ref_name == 'main' && github.event_name != 'pull_request' - run: | - echo "NPM_DIST_TAG=latest" >> $GITHUB_ENV - echo "DOCS_TAG=latest" >> $GITHUB_ENV - - - name: Set next tags - if: github.ref_name == 'next' && github.event_name != 'pull_request' - run: | - echo "NPM_DIST_TAG=next" >> $GITHUB_ENV - echo "DOCS_TAG=next" >> $GITHUB_ENV - - - name: Set next-major tags - if: github.ref_name == 'next-major' && github.event_name != 'pull_request' - run: | - echo "NPM_DIST_TAG=next-major" >> $GITHUB_ENV - echo "DOCS_TAG=next-major" >> $GITHUB_ENV - - - name: Set feature branch tags - if: github.ref_name != 'main' && github.ref_name != 'next' && github.ref_name != 'next-major' && github.event_name != 'pull_request' + - name: Install cross compilation tools run: | - echo "NPM_DIST_TAG=test" >> $GITHUB_ENV - echo "FEATURE_BRANCH=${{ github.ref_name }}" >> $GITHUB_ENV - - - name: Set PR tags - if: github.ref_name != 'main' && github.ref_name != 'next' && github.ref_name != 'next-major' && github.event_name == 'pull_request' - run: | - echo "NPM_DIST_TAG=test" >> $GITHUB_ENV - echo "DOCS_TAG=pr-$(node ./src/js/version.mjs branch-to-prerelease ${{ github.head_ref }})" >> $GITHUB_ENV - echo "FEATURE_BRANCH=${{ github.head_ref }}" >> $GITHUB_ENV + sudo apt-get install -y \ + gcc-9 \ + g++-9 \ + gcc-9-arm-linux-gnueabihf \ + g++-9-arm-linux-gnueabihf \ + libc6-armhf-cross \ + libc6-dev-armhf-cross + + - name: Set up env variables for cross-compilation + run: | + echo "CC=arm-linux-gnueabihf-gcc-9" >> $GITHUB_ENV + echo "CXX=arm-linux-gnueabihf-g++-9" >> $GITHUB_ENV + echo "CFLAGS='-O2 -march=armv7-a'" >> $GITHUB_ENV + echo "CXXFLAGS='-O2 -march=armv7-a'" >> $GITHUB_ENV + echo "LDFLAGS='-L/usr/arm-linux-gnueabihf/lib'" >> $GITHUB_ENV + echo "SYSROOT=/usr/arm-linux-gnueabihf" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=$SYSROOT/lib/pkgconfig" >> $GITHUB_ENV + echo "LD_LIBRARY_PATH=$SYSROOT/lib" >> $GITHUB_ + + - name: Install zlib from source + run: | + wget https://zlib.net/zlib-1.3.1.tar.gz + tar -xzf zlib-1.3.1.tar.gz + cd zlib-1.3.1 + CFLAGS="-O2 -pipe" CC=${CC} ./configure --prefix=${SYSROOT} + make + sudo make install - name: Set file permissions run: | chmod -R 755 ./ chown -R $(id -u):$(id -g) ./ - # Perform real (When not a PR) or dry-run (When PR) semantic-release - - name: Release mono-artifact to GitHub - if: (github.ref_name != 'main' && github.event_name != 'pull_request') || github.event_name == 'workflow_dispatch' - env: - GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }} # <-- Allows semantic-release-bot to push changes to protected branches - DEBUG: semantic-release:* - run: | - git config --global --add safe.directory /__w/firebolt-apis/firebolt-apis - npx semantic-release - - - name: Dry-run mono-artifact - if: (github.ref_name == 'main' && github.event_name != 'workflow_dispatch') || github.event_name == 'pull_request' - env: - GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }} # <-- Allows semantic-release-bot to push changes to protected branches - run: npx semantic-release --dry-run + - name: Install jsonref + run: pip3 install jsonref - - name: Build artifacts for feature branches - if: github.ref_name != 'main' && github.ref_name != 'next' && github.ref_name != 'next-major' - run: | - PRERELEASE=$(node ./src/js/version.mjs branch-to-prerelease $FEATURE_BRANCH) - node ./src/js/version.mjs latest-prerelease $PRERELEASE - npm version prerelease --preid $PRERELEASE --git-tag-version false - npm version prerelease --preid $PRERELEASE --workspaces --git-tag-version false - npm run dist - - - name: Check if semantic-release created a build - id: check_build - uses: andstor/file-existence-action@v2 - with: - files: './src/sdks/core/dist/lib/firebolt.mjs' + - name: Generate js sdk + run: npm run dist - name: Get version from package.json run: | @@ -152,71 +106,26 @@ jobs: echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV echo "build_cpp_source=true" >> $GITHUB_ENV - - name: Set cpp build source Condition - if: steps.check_build.outputs.files_exists == 'false' || (github.ref_name == 'main' && github.event_name != 'pull_request' && github.event_name != 'workflow_dispatch') - run: echo "build_cpp_source=false" >> $GITHUB_ENV - - name: Generate native sdk source if: env.build_cpp_source == 'true' run: | .github/workflows/utils.sh generateSource - + - name: Clone and Install Thunder if: env.build_cpp_source == 'true' id: install_thunder run: | .github/workflows/utils.sh cloneAndInstallThunder - + - name: Build Core SDK CPP if: env.build_cpp_source == 'true' id: build_core_cpp run: | .github/workflows/utils.sh buildCoreCPPSDK $RELEASE_VERSION - - name: Build Manage SDK CPP - if: env.build_cpp_source == 'true' - id: build_manage_cpp - run: | - .github/workflows/utils.sh buildManageCPPSDK $RELEASE_VERSION - - - name: Build Discovery SDK CPP - if: env.build_cpp_source == 'true' - id: build_discovery_cpp - run: | - .github/workflows/utils.sh buildDiscoveryCPPSDK $RELEASE_VERSION - - - name: Release Firebolt SDKs to NPM - if: steps.check_build.outputs.files_exists == 'true' && github.event_name != 'pull_request' && (github.ref_name != 'main' || github.event_name == 'workflow_dispatch') - env: - NPM_TOKEN: ${{ secrets.SEMANTIC_RELEASE_NPM_TOKEN }} # <-- Allows semantic-release to publish to npm without 2 factor auth. - run: | - npm --version - echo "NPM DIST TAG ::: " $NPM_DIST_TAG - npm publish --tag $NPM_DIST_TAG --workspaces - - - name: Dry-run Firebolt SDKs to NPM - if: steps.check_build.outputs.files_exists == 'true' && (github.ref_name == 'main' && github.event_name != 'workflow_dispatch') - env: - NPM_TOKEN: ${{ secrets.SEMANTIC_RELEASE_NPM_TOKEN }} # <-- Allows semantic-release to publish to npm without 2 factor auth. - run: npm publish --tag $NPM_DIST_TAG --workspaces --dry-run - - - name: Checkout firebolt GitHub.io repository - if: steps.check_build.outputs.files_exists == 'true' - env: - GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }} # <-- Allows semantic-release-bot to push changes to protected branches - run: | - cd /tmp - git clone https://rdkcentral:$GITHUB_TOKEN@github.com/rdkcentral/firebolt.git ./firebolt-docs - - - name: Release docs to GitHub.io - if: steps.check_build.outputs.files_exists == 'true' && (github.ref_name == 'main' || github.ref_name == 'next' || github.ref_name == 'next-major' || github.event_name == 'pull_request') - env: - GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }} # <-- Allows semantic-release-bot to push changes to protected branches - run: | - npm run publish:docs /tmp/firebolt-docs $DOCS_TAG - cd /tmp/firebolt-docs - git config --global user.email "you@example.com" - git config --global user.name "Your Name" - git add --all - git diff-index --quiet HEAD || git commit -m "chore: Publish $DOCS_TAG" - git push + - name: Upload SDK artifact + if: success() + uses: actions/upload-artifact@v3 + with: + name: core-sdk + path: firebolt-apis/src/sdks/core/build/cpp/src/*.tgz