diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml new file mode 100644 index 00000000..42e7d8a4 --- /dev/null +++ b/.github/workflows/pull_request.yaml @@ -0,0 +1,26 @@ +# Copyright the Hyperledger Fabric contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: Pull request + +on: + pull_request: + branches: + - main + - release-2.5 + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + test: + uses: ./.github/workflows/test.yaml + + pull-request: + needs: test + name: Pull request success + runs-on: ubuntu-latest + steps: + - run: true diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml new file mode 100644 index 00000000..2d8db9a5 --- /dev/null +++ b/.github/workflows/push.yaml @@ -0,0 +1,15 @@ +# Copyright the Hyperledger Fabric contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: Push + +on: + push: + branches: + - main + - release-2.5 + workflow_dispatch: + +jobs: + test: + uses: ./.github/workflows/test.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..3d9ff9dc --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,90 @@ +# Copyright the Hyperledger Fabric contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: Release + +on: + create: + tags: + - "v2.*" + workflow_dispatch: + +env: + CHAINCODE_CONTAINER_NODE_VER: 18 + DOCKER_REGISTRY: ${{ github.repository_owner == 'hyperledger' && 'docker.io' || 'ghcr.io' }} + +jobs: + test: + uses: ./.github/workflows/test.yaml + + publishnpm: + runs-on: ubuntu-20.04 + needs: test + steps: + - uses: actions/setup-node@v3 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + - uses: actions/download-artifact@v3 + with: + name: node-tgzs + path: build/ + - run: | + set -xev + ls -lart build/ + cd build + find . -type f -name 'fabric-*.tgz' -exec npm publish {} \; + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + publishdocker: + runs-on: ubuntu-20.04 + needs: test + permissions: + contents: read + packages: write + + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + buildkitd-flags: --debug + config-inline: | + [worker.oci] + max-parallelism = 1 + + - name: Checkout + uses: actions/checkout@v3 + + - name: Login to the ${{ env.DOCKER_REGISTRY }} Container Registry + uses: docker/login-action@v2 + with: + registry: ${{ env.DOCKER_REGISTRY }} + username: ${{ env.DOCKER_REGISTRY == 'docker.io' && secrets.DOCKERHUB_USERNAME || github.actor }} + password: ${{ env.DOCKER_REGISTRY == 'docker.io' && secrets.DOCKERHUB_TOKEN || secrets.GITHUB_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.DOCKER_REGISTRY }}/${{ github.repository_owner }}/fabric-nodeenv + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}}.{{minor}}.{{patch}} + + - name: Build and push ${{ matrix.COMPONENT }} Image + id: push + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm64 + file: docker/fabric-nodeenv/Dockerfile + context: docker/fabric-nodeenv + tags: ${{ steps.meta.outputs.tags }} + push: ${{ github.event_name != 'pull_request' }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + NODE_VER=${{ env.CHAINCODE_CONTAINER_NODE_VER }} diff --git a/.github/workflows/schedule.yaml b/.github/workflows/schedule.yaml new file mode 100644 index 00000000..7eaed227 --- /dev/null +++ b/.github/workflows/schedule.yaml @@ -0,0 +1,15 @@ +# Copyright the Hyperledger Fabric contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +name: Scheduled build + +on: + schedule: + - cron: "5 2 * * *" + workflow_dispatch: + +jobs: + test: + uses: ./.github/workflows/test.yaml + with: + checkout-ref: ${{ matrix.checkout-ref }} diff --git a/.github/workflows/build.yaml b/.github/workflows/test.yaml similarity index 68% rename from .github/workflows/build.yaml rename to .github/workflows/test.yaml index 5cc004c2..57166873 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/test.yaml @@ -1,25 +1,15 @@ # Copyright the Hyperledger Fabric contributors. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -name: fabric-chaincode-node-build +name: Test on: - push: - branches: - - main - - release-2.5 - pull_request: - branches: - - main - - release-2.5 - create: - tags: - - "v2.*" - workflow_dispatch: - -env: - CHAINCODE_CONTAINER_NODE_VER: 18 - DOCKER_REGISTRY: ${{ github.repository_owner == 'hyperledger' && 'docker.io' || 'ghcr.io' }} + workflow_call: + inputs: + checkout-ref: + default: '' + required: false + type: string jobs: setup: @@ -30,6 +20,8 @@ jobs: BUILD_DATE: ${{ steps.builddata.outputs.BUILD_DATE }} steps: - uses: actions/checkout@v3 + with: + ref: ${{ inputs.checkout-ref }} - uses: actions/setup-node@v3 with: node-version: '18.x' @@ -62,6 +54,8 @@ jobs: steps: - uses: actions/checkout@v3 + with: + ref: ${{ inputs.checkout-ref }} - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: @@ -101,12 +95,14 @@ jobs: fvtest: runs-on: ubuntu-20.04 - needs: [build] + needs: build strategy: matrix: node-version: [18.x] steps: - uses: actions/checkout@v3 + with: + ref: ${{ inputs.checkout-ref }} - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: @@ -165,6 +161,8 @@ jobs: node-version: [18.x] steps: - uses: actions/checkout@v3 + with: + ref: ${{ inputs.checkout-ref }} - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: @@ -181,78 +179,3 @@ jobs: mkdir -p audit && cd audit && npm init -y npm install --registry http://localhost:4873 fabric-shim fabric-shim-api fabric-contract-api --save npm audit --audit-level=moderate - - publishnpm: - runs-on: ubuntu-20.04 - needs: [build,fvtest,src_audit] - if: startsWith(github.ref, 'refs/tags/') - steps: - - uses: actions/setup-node@v3 - with: - node-version: '18.x' - registry-url: 'https://registry.npmjs.org' - - uses: actions/download-artifact@v3 - with: - name: node-tgzs - path: build/ - - run: | - set -xev - ls -lart build/ - cd build - find . -type f -name 'fabric-*.tgz' -exec npm publish {} \; - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - - publishdocker: - runs-on: ubuntu-20.04 - needs: [setup,build,fvtest,src_audit] - if: startsWith(github.ref, 'refs/tags/') - permissions: - contents: read - packages: write - - steps: - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - buildkitd-flags: --debug - config-inline: | - [worker.oci] - max-parallelism = 1 - - - name: Checkout - uses: actions/checkout@v3 - - - name: Login to the ${{ env.DOCKER_REGISTRY }} Container Registry - uses: docker/login-action@v2 - with: - registry: ${{ env.DOCKER_REGISTRY }} - username: ${{ env.DOCKER_REGISTRY == 'docker.io' && secrets.DOCKERHUB_USERNAME || github.actor }} - password: ${{ env.DOCKER_REGISTRY == 'docker.io' && secrets.DOCKERHUB_TOKEN || secrets.GITHUB_TOKEN }} - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.DOCKER_REGISTRY }}/${{ github.repository_owner }}/fabric-nodeenv - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}}.{{minor}}.{{patch}} - - - name: Build and push ${{ matrix.COMPONENT }} Image - id: push - uses: docker/build-push-action@v3 - with: - platforms: linux/amd64,linux/arm64 - file: docker/fabric-nodeenv/Dockerfile - context: docker/fabric-nodeenv - tags: ${{ steps.meta.outputs.tags }} - push: ${{ github.event_name != 'pull_request' }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - NODE_VER=${{ env.CHAINCODE_CONTAINER_NODE_VER }}