| name: Build and Test |
| |
| on: push |
| |
| permissions: read-all |
| |
| # update in build.yml and codeql.yml at same time |
| env: |
| PROTOC_VERSION: "33.0" |
| |
| jobs: |
| build: |
| runs-on: ubuntu-latest |
| |
| env: |
| PROTOC: protoc-release/bin/protoc |
| PROTOC_INC: protoc-release/include |
| PROTOC_PLATFORM: linux-x86_64 |
| |
| steps: |
| |
| - uses: actions/checkout@v4 |
| |
| - uses: actions/setup-node@v4 |
| with: |
| token: ${{ secrets.GITHUB_TOKEN }} |
| node-version: 20 |
| cache: ${{ !env.ACT && 'npm' || '' }} # cache API not available in ACT |
| |
| - name: Install Protoc |
| run: | |
| echo "Fetching protoc" |
| curl --header 'Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \ |
| -L https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-${PROTOC_PLATFORM}.zip \ |
| --output protoc-release.zip |
| unzip protoc-release.zip -d protoc-release |
| rm protoc-release.zip |
| |
| - run: npm ci |
| |
| - run: npm test |
| |
| - run: npm run build |
| |
| - uses: actions/upload-artifact@v4 |
| with: |
| name: js |
| path: | |
| google-protobuf.js |
| google |
| |
| package: |
| needs: build |
| runs-on: ${{ matrix.os }} |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| # for now I'm disabling linux building as we don't have the tooling to support it |
| # os: [ ubuntu-latest ] |
| # cpu: |
| # - k8 # this build 'linux-x86_64', is currently working but not useful without the other architectures |
| # would need some kind of CROSSTOOL chain to build the other architectures |
| # or we'd have to use the https://github.com/uraimo/run-on-arch-action (which lacks support for x86_32) to build these |
| # - x86_32 |
| # - systemz |
| # - aarch64 |
| # - ppc64 |
| include: |
| # to ensure backwards compatibility as long as possible, use earliest versions of OSs available on Github Actions |
| - os: windows-2022 |
| cpu: x64_windows |
| bazel_target: dist_zip |
| - os: windows-2022 |
| cpu: x64_x86_windows |
| bazel_target: dist_zip |
| - os: macos-14 |
| cpu: darwin_arm64 |
| bazel_target: dist_zip |
| - os: macos-14-large |
| cpu: darwin_x86_64 |
| bazel_target: dist_zip |
| |
| |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - uses: actions/download-artifact@v4 |
| if: ${{ !env.ACT }} |
| with: |
| name: js |
| |
| - uses: bazel-contrib/setup-bazel@0.15.0 |
| with: |
| token: ${{ secrets.GITHUB_TOKEN }} |
| |
| - run: mkdir out |
| |
| # setup-bazelisk fails when running in ACT because the cache is not available so we need to ignore to let the bazel step run |
| - if: success() || env.ACT && failure() |
| run: bazel build --cpu=${{ matrix.cpu }} ${{ matrix.bazel_target || 'dist_all' }} |
| shell: bash |
| |
| # need to copy to output directory as `bazel-bin` is a symlink and cannot be read by the actions/upload-artifact action |
| - run: cp bazel-bin/protobuf-javascript-* out/ |
| |
| - uses: actions/upload-artifact@v4 |
| with: |
| name: release-${{ matrix.os }}-${{ matrix.cpu }} |
| path: out |