Skip to content

Update server

Update server #21

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/*