Update server #21
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Update server | |
| on: | |
| workflow_call: | |
| inputs: | |
| protocol_version: | |
| description: '[mandatory] Protocol version to update.' | |
| type: string | |
| required: true | |
| workflow_dispatch: | |
| inputs: | |
| protocol_version: | |
| description: '[mandatory] Protocol version to update.' | |
| type: choice | |
| required: true | |
| default: 'v30.2' | |
| options: | |
| - 'v30.2' | |
| - 'v31.0' | |
| zksync_server_branch: | |
| description: '[mandatory] Git branch of zksync-os-server to use.' | |
| type: string | |
| required: true | |
| default: 'main' | |
| zksync_era_version: | |
| description: '[optional] Explicit version of zksync-era to use. If not specified, derived from protocol version.' | |
| type: string | |
| required: false | |
| era_contracts_version: | |
| description: '[optional] Explicit version of era-contracts to use. If not specified, derived from protocol version.' | |
| type: string | |
| required: false | |
| commit_changes: | |
| description: '[mandatory] Whether to commit the server changes back to the repository. If set to false, changes will not be committed, but a patch file will be saved as an artifact.' | |
| type: boolean | |
| required: false | |
| default: true | |
| open_pr: | |
| description: '[optional] Whether to open a PR for the committed changes.' | |
| type: boolean | |
| required: false | |
| default: true | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: update-server-${{ github.ref }}-${{ inputs.protocol_version }} | |
| cancel-in-progress: true | |
| defaults: | |
| run: | |
| shell: bash -ex {0} | |
| env: | |
| # Versions mapping for v30 | |
| ZKSYNC_OS_SERVER_VERSION_V30: "main" | |
| ZKSYNC_FOUNDRY_VERSION_V30: "nightly-ae913af65381734ad46c044a9495b67310bc77c4" | |
| ZKSYNC_ERA_VERSION_V30: "zkstack-for-zksync-os" | |
| ERA_CONTRACTS_VERSION_V30: "zksync-os-stable" | |
| # Versions mapping for v31 | |
| ZKSYNC_OS_SERVER_VERSION_V31: "main" | |
| ZKSYNC_FOUNDRY_VERSION_V31: "v0.1.5" | |
| ZKSYNC_ERA_VERSION_V31: "draft-v31" | |
| ERA_CONTRACTS_VERSION_V31: "draft-v31-with-zksync-os" | |
| # To avoid uv warning about cache | |
| UV_LINK_MODE: copy | |
| WORKSPACE: "${{ github.workspace }}/workspace" | |
| VERBOSE: "true" | |
| jobs: | |
| check-server: | |
| runs-on: matterlabs-ci-runner-high-performance | |
| name: Server update (${{ inputs.protocol_version }}) | |
| steps: | |
| - name: Define tools versions | |
| id: define-versions | |
| run: | | |
| if [[ "${{ inputs.protocol_version }}" == "v30.2" ]]; then | |
| echo "zksync_foundry_version=${{ env.ZKSYNC_FOUNDRY_VERSION_V30 }}" >> "${GITHUB_OUTPUT}" | |
| echo "zksync_era_version=${{ inputs.zksync_era_version != '' && inputs.zksync_era_version || env.ZKSYNC_ERA_VERSION_V30 }}" >> "${GITHUB_OUTPUT}" | |
| echo "era_contracts_version=${{ inputs.era_contracts_version != '' && inputs.era_contracts_version || env.ERA_CONTRACTS_VERSION_V30 }}" >> "${GITHUB_OUTPUT}" | |
| echo "zksync_server_branch=${{ inputs.zksync_server_branch != '' && inputs.zksync_server_branch || env.ZKSYNC_OS_SERVER_VERSION_V30 }}" >> "${GITHUB_OUTPUT}" | |
| elif [[ "${{ inputs.protocol_version }}" == "v31.0" ]]; then | |
| echo "zksync_foundry_version=${{ env.ZKSYNC_FOUNDRY_VERSION_V31 }}" >> "${GITHUB_OUTPUT}" | |
| echo "zksync_era_version=${{ inputs.zksync_era_version != '' && inputs.zksync_era_version || env.ZKSYNC_ERA_VERSION_V31 }}" >> "${GITHUB_OUTPUT}" | |
| echo "era_contracts_version=${{ inputs.era_contracts_version != '' && inputs.era_contracts_version || env.ERA_CONTRACTS_VERSION_V31 }}" >> "${GITHUB_OUTPUT}" | |
| echo "zksync_server_branch=${{ inputs.zksync_server_branch != '' && inputs.zksync_server_branch || env.ZKSYNC_OS_SERVER_VERSION_V31 }}" >> "${GITHUB_OUTPUT}" | |
| else | |
| echo "Unsupported protocol version: ${{ inputs.protocol_version }}" | |
| exit 1 | |
| fi | |
| - name: Checkout repo | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Setup runner | |
| uses: ./.github/actions/runner-setup | |
| with: | |
| zksync_foundry_version: ${{ steps.define-versions.outputs.zksync_foundry_version }} | |
| - name: Checkout dependencies | |
| uses: ./.github/actions/checkout-deps | |
| with: | |
| github_token: ${{ secrets.RELEASE_TOKEN }} | |
| zksync_era_version: ${{ steps.define-versions.outputs.zksync_era_version }} | |
| era_contracts_version: ${{ steps.define-versions.outputs.era_contracts_version }} | |
| zksync_os_server_version: ${{ steps.define-versions.outputs.zksync_server_branch }} | |
| - name: Update server | |
| timeout-minutes: 45 # If update takes more than 45 minutes, something is wrong | |
| run: | | |
| REPO_DIR=${WORKSPACE}/zksync-os-server \ | |
| ERA_CONTRACTS_PATH=${WORKSPACE}/era-contracts \ | |
| ZKSYNC_ERA_PATH=${WORKSPACE}/zksync-era \ | |
| PROTOCOL_VERSION="${{ inputs.protocol_version }}" \ | |
| uv run -m scripts.update_server | |
| - name: Save git patch | |
| if: success() | |
| working-directory: ${{ env.WORKSPACE }}/zksync-os-server | |
| run: git diff > "${GITHUB_WORKSPACE}/server_${{ inputs.protocol_version }}.patch" | |
| - name: Upload git patch | |
| if: success() | |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f4 # v6.0.0 | |
| with: | |
| name: server-patch-${{ inputs.protocol_version }} | |
| path: "server_${{ inputs.protocol_version }}.patch" | |
| - name: Commit server changes | |
| if: success() && inputs.commit_changes | |
| working-directory: ${{ env.WORKSPACE }}/zksync-os-server | |
| env: | |
| GH_TOKEN: ${{ secrets.RELEASE_TOKEN }} | |
| COMMIT_TITLE: "chore: update server for protocol ${{ inputs.protocol_version }}" | |
| run: | | |
| if [[ "${{ inputs.open_pr }}" == "true" ]]; then | |
| BRANCH="update-local-chains-$(date +%s)" | |
| fi | |
| if ! git diff --exit-code --quiet; then | |
| git config user.name "zksync-os-bot" | |
| git config user.email "zksync-os-bot@users.noreply.github.com" | |
| if [ -n "${BRANCH}" ]; then | |
| git checkout -b "${BRANCH}" | |
| fi | |
| git add . | |
| git commit -m "${{ env.COMMIT_TITLE }}" | |
| git push --set-upstream origin ${BRANCH:-${{ steps.define-versions.outputs.zksync_server_branch }}} | |
| if [[ "${{ inputs.open_pr }}" == "true" ]]; then | |
| gh pr create --title "${{ env.COMMIT_TITLE }}" \ | |
| --body "Automated local-chains update for protocol ${{ inputs.protocol_version }}" \ | |
| --base "${{ steps.define-versions.outputs.zksync_server_branch }}" \ | |
| --head "${BRANCH}" | |
| fi | |
| fi | |
| - name: Upload logs | |
| if: failure() | |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f4 # v6.0.0 | |
| with: | |
| name: server-update-logs | |
| path: ${{ github.workspace }}/workspace/.logs/* |