diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..d4a6258c7b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,123 @@ +name: Build + +on: + pull_request: + branches: + - master + types: [opened, synchronize] + paths-ignore: + - 'config/**' + - '**/*.md' + push: + # Build for the master branch. + branches: + - master + release: + # Publish released commit as Docker `latest` and `git_revision` images. + types: + - published + workflow_dispatch: + inputs: + ref: + description: 'Ref to build CLI [default: latest master; examples: v0.40.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]' + required: false + default: '' + push_image: + description: 'Push images to DockerHub [default: false; examples: true, false]' + required: false + default: 'false' + use_latest_tag: + description: 'Use `latest` tag while pushing images to DockerHub [default: false; examples: true, false]' + required: false + default: 'false' + +jobs: + build_bins: + name: Build + runs-on: ${{matrix.os.name}} + strategy: + matrix: + os: [{ name: ubuntu-22.04, bin-name: linux }] # { name: windows-2022, bin-name: windows }, { name: macos-12, bin-name: darwin } + arch: [amd64] # arm64 + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.ref }} + # Allows to fetch all history for all branches and tags. Need this for proper versioning. + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.21' + cache: true + + - name: Build + run: make + env: + GOARCH: ${{ matrix.arch }} + + - name: Rename binaries + run: for i in ./bin/*; do mv $i $i-${{ matrix.os.bin-name }}-${{ matrix.arch }}${{ (matrix.os.bin-name == 'windows' && '.exe') || '' }}; done + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: Binaries ${{ matrix.os.bin-name }}-${{ matrix.arch }} + path: ./bin/* + if-no-files-found: error + + - name: Attach binaries to the release as assets + if: ${{ github.event_name == 'release' }} + run: gh release upload ${{ github.event.release.tag_name }} ./bin/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + build_images: + needs: build_bins + name: Build and push docker images + runs-on: ubuntu-22.04 + strategy: + matrix: + image: [adm, cli, ir, storage] + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.ref }} + fetch-depth: 0 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Set version + id: setver + run: echo version=`make version` >> $GITHUB_OUTPUT + + - name: Set latest tag + id: setlatest + if: ${{ (github.event_name == 'release' && github.event.release.target_commitish == 'master') || (github.event_name == 'workflow_dispatch' && github.event.inputs.use_latest_tag == 'true') }} + run: echo "latest=,nspccdev/neofs-${{matrix.image}}:latest" >> $GITHUB_OUTPUT + + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: . + file: .docker/Dockerfile.${{matrix.image}} + push: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }} + platforms: linux/amd64 + build-args: | + REPO=github.com/${{ github.repository }} + VERSION=${{ steps.setver.outputs.version }} + tags: nspccdev/neofs-${{matrix.image}}:${{ steps.setver.outputs.version }}${{ steps.setlatest.outputs.latest }} diff --git a/CHANGELOG.md b/CHANGELOG.md index bdad85e679..82200b51df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ Changelog for NeoFS Node ### Updated ### Updating from v0.40.0 +We no longer provide .tag.gz binaries in releases, they always were just +duplicates, but if you're using them in some scripts please update to fetch +raw binaries. ## [0.40.0] - 2024-02-09 - Maldo diff --git a/docs/release-instruction.md b/docs/release-instruction.md index a4c747ba0e..3996cb3c91 100644 --- a/docs/release-instruction.md +++ b/docs/release-instruction.md @@ -82,58 +82,45 @@ $ git push release/${NEOFS_TAG_PREFIX}${NEOFS_REVISION} Open pull request to the main branch of the origin repository so that the maintainers check the changes. Remove release branch after the merge. -## Tag the release +## Create a GitHub release and a tag -Pull the main branch with release commit created in previous step. Tag the commit -with PGP signature. +Use "Draft a new release" button in the "Releases" section. Create a new +`vX.Y.Z` tag for it following the semantic versioning standard. Put change log +for this release into the description. Do not attach any binaries at this step. +Set the "Set as the latest release" checkbox if this is the latest stable +release or "Set as a pre-release" if this is an unstable pre-release. +Press the "Publish release" button. -```shell -$ git checkout master && git pull -$ git tag -s ${NEOFS_TAG_PREFIX}${NEOFS_REVISION} -``` +## Add automatically-built binaries -## Push the release tag +New release created at the previous step triggers automatic builds (if not, +start them manually from the Build GitHub workflow), so wait for them to +finish. Built binaries should be automatically attached to the release as an +asset, check it on the release page. If binaries weren't attached after building +workflow completion, then submit the bug, download currently supported binaries +from the building job artifacts, unpack archive and add them to the +previously created release via "Edit release" button. -```shell -$ git push origin ${NEOFS_TAG_PREFIX}${NEOFS_REVISION} -``` +Docker image builds are triggered automatically as well, check they're successful +or upload manualy if that's not the case. ## Post-release -### Prepare and push images to a Docker Hub (if not automated) - -Create Docker images for all applications and push them into Docker Hub -(requires [organization](https://hub.docker.com/u/nspccdev) privileges) - -```shell -$ git checkout ${NEOFS_TAG_PREFIX}${NEOFS_REVISION} -$ make images -$ docker push nspccdev/neofs-storage:${NEOFS_REVISION} -$ docker push nspccdev/neofs-storage-testnet:${NEOFS_REVISION} -$ docker push nspccdev/neofs-ir:${NEOFS_REVISION} -$ docker push nspccdev/neofs-cli:${NEOFS_REVISION} -$ docker push nspccdev/neofs-adm:${NEOFS_REVISION} -``` - -### Make a proper GitHub release (if not automated) +### Close GitHub milestone -Edit an automatically-created release on GitHub, copy things from `CHANGELOG.md`. -Build and tar release binaries with `make prepare-release`, attach them to -the release. Publish the release. +Look up GitHub [milestones](https://github.com/nspcc-dev/neofs-node/milestones) and close the release one if exists. ### Update NeoFS Developer Environment Prepare pull-request in [neofs-devenv](https://github.com/nspcc-dev/neofs-devenv) with new versions. -### Close GitHub milestone - -Look up GitHub [milestones](https://github.com/nspcc-dev/neofs-node/milestones) and close the release one if exists. +### Announcements -### Rebuild NeoFS LOCODE database +Copy the GitHub release page link to: + * Discord channel + * Element (Matrix) channel -If new release contains LOCODE-related changes, rebuild NeoFS LOCODE database via NeoFS CLI +### Deployment -```shell -$ neofs-cli util locode generate ... -``` +Deploy the updated version to the mainnet/testnet.