Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-21: Add release CI #122

Merged
merged 6 commits into from
Sep 17, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@
name: Lint
on:
push:
branches-ignore:
- 'dependabot/**'
branches:
- '**'
- '!dependabot/**'
tags:
- '*'
pull_request:
concurrency:
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
Expand Down
134 changes: 134 additions & 0 deletions .github/workflows/rc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

name: RC
on:
push:
branches:
- '**'
- '!dependabot/**'
tags:
- '*-rc*'
pull_request:
concurrency:
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
cancel-in-progress: true
permissions:
contents: read
jobs:
archive:
name: Archive
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
submodules: recursive
- name: Prepare for tag
if: github.ref_type == 'tag'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be ${{ github.ref_type }} ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can omit ${{ ... }}: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idif

When you use expressions in an if conditional, you can, optionally, omit the ${{ }} expression syntax because GitHub Actions automatically evaluates the if conditional as an expression. However, this exception does not apply everywhere.

You must always use the ${{ }} expression syntax or escape with '', "", or () when the expression starts with !, since ! is reserved notation in YAML format.

run: |
version=${GITHUB_REF_NAME%-rc*}
version=${version#v}
rc=${GITHUB_REF_NAME#*-rc}
echo "VERSION=${version}" >> ${GITHUB_ENV}
echo "RC=${rc}" >> ${GITHUB_ENV}
- name: Prepare for branch
if: github.ref_type == 'branch'
run: |
version=$(grep -o '^const PkgVersion = ".*"' "arrow/doc.go" |
sed \
-e 's/^const PkgVersion = "//' \
-e 's/"$//')
rc=100
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why rc=100?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just want to use RC that is never used for normal RCs.
We can use 1000, $(date %Y%m%d) or something instead of 100 here.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, gotcha. $(date %Y%m%d) is probably best i think?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK. I'll use it.

echo "VERSION=${version}" >> ${GITHUB_ENV}
echo "RC=${rc}" >> ${GITHUB_ENV}
- name: Archive
run: |
id="apache-arrow-go-${VERSION}"
tar_gz="${id}.tar.gz"
echo "TAR_GZ=${tar_gz}" >> ${GITHUB_ENV}
git archive HEAD --prefix "${id}/" --output "${tar_gz}"
sha256sum "${tar_gz}" > "${tar_gz}.sha256"
sha512sum "${tar_gz}" > "${tar_gz}.sha512"
- name: Audit
run: |
dev/release/run_rat.sh "${TAR_GZ}"
- uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: archive
path: |
apache-arrow-go-*
verify:
name: Verify
needs:
- archive
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- macos-latest
- ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
submodules: recursive
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: archive
- name: Verify
run: |
tar_gz=$(echo apache-arrow-go-*.tar.gz)
version=${tar_gz#apache-arrow-go-}
version=${version%.tar.gz}
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
rc="${GITHUB_REF_NAME#*-rc}"
else
rc=100
fi
VERIFY_DEFAULT=0 dev/release/verify_rc.sh "${version}" "${rc}"
raulcd marked this conversation as resolved.
Show resolved Hide resolved
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
upload:
name: Upload
if: github.ref_type == 'tag'
needs:
- verify
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
submodules: recursive
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: archive
- name: Upload
run: |
# TODO: Add support for release note
gh release create ${GITHUB_REF_NAME} \
--prerelease \
--title "Apache Arrow Go ${GITHUB_REF_NAME}" \
--verify-tag \
apache-arrow-go-*.tar.gz \
apache-arrow-go-*.tar.gz.sha*
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
24 changes: 11 additions & 13 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@
name: Test
on:
push:
branches-ignore:
- 'dependabot/**'
branches:
- '**'
- '!dependabot/**'
tags:
- '*'
pull_request:
concurrency:
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
Expand Down Expand Up @@ -202,15 +205,12 @@ jobs:
go-version: ${{ matrix.go }}
cache: true
cache-dependency-path: go.sum
- name: Install bash via Homebrew
run: |
brew install bash
- name: Build
run: |
$(brew --prefix)/bin/bash ci/scripts/build.sh $(pwd)
ci/scripts/build.sh $(pwd)
- name: Test
run: |
$(brew --prefix)/bin/bash ci/scripts/test.sh $(pwd)
ci/scripts/test.sh $(pwd)
macos-cgo:
name: AMD64 macOS 12 Go ${{ matrix.go }} - CGO
runs-on: macos-12
Expand All @@ -235,18 +235,16 @@ jobs:
cache: true
cache-dependency-path: go.sum
- name: Brew Install Arrow and pkg-config
shell: bash
run: brew install apache-arrow pkg-config bash
- name: Add To pkg config path
shell: bash
run: brew install apache-arrow pkg-config
- name: Setup PKG_CONFIG_PATH
run: |
echo "PKG_CONFIG_PATH=$(brew --prefix openssl@3)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- name: Build
run: |
$(brew --prefix)/bin/bash ci/scripts/build.sh $(pwd)
ci/scripts/build.sh $(pwd)
- name: Test
run: |
$(brew --prefix)/bin/bash ci/scripts/test.sh $(pwd)
ci/scripts/test.sh $(pwd)
windows:
name: AMD64 Windows 2019 Go ${{ matrix.go }}
runs-on: windows-2019
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
# under the License.

.vscode
/apache-arrow-go-*.tar.gz
/apache-arrow-go-*.tar.gz.asc
/apache-arrow-go.tar.gz
/dev/release/apache-rat-*.jar
/dev/release/filtered_rat.txt
Expand Down
2 changes: 1 addition & 1 deletion arrow/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ To build with tinygo include the noasm build tag.
*/
package arrow

const PkgVersion = "18.0.0-SNAPSHOT"
const PkgVersion = "18.0.0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this doesn't have to change for this PR, only when releasing, right? or do we want this to be 17.0.0 and increment on the new release?
I think we should probably continue using SNAPSHOT and just remove the SNAPSHOT bit when releasing.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this doesn't have to change for this PR, only when releasing, right?

No.

or do we want this to be 17.0.0 and increment on the new release?

No.

My suggestions:

  • Don't use -SNAPSHOT suffix for unreleased version
  • We don't update this just after we release a new version
    • Because we can't know the next version (18.0.1? 18.1.0? 19.0.0?) just after we release a new version
  • We update this just before we release a new version, when we add a new compatible feature (minor version up) or when we add an incompatible change (major version up)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sounds good to me to update just before releasing


//go:generate go run _tools/tmpl/main.go -i -data=numeric.tmpldata type_traits_numeric.gen.go.tmpl type_traits_numeric.gen_test.go.tmpl array/numeric.gen.go.tmpl array/numericbuilder.gen.go.tmpl array/bufferbuilder_numeric.gen.go.tmpl
//go:generate go run _tools/tmpl/main.go -i -data=datatype_numeric.gen.go.tmpldata datatype_numeric.gen.go.tmpl tensor/numeric.gen.go.tmpl tensor/numeric.gen_test.go.tmpl
Expand Down
4 changes: 2 additions & 2 deletions ci/scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ pushd "${source_dir}/arrow"

: "${ARROW_GO_TESTCGO:=}"

go_install_arrow_options=()
go_install_arrow_options=(-v)
if [[ -n "${ARROW_GO_TESTCGO}" ]]; then
if [[ "${MSYSTEM:-}" = "MINGW64" ]]; then
export PATH=${MINGW_PREFIX}/bin:${PATH}
Expand All @@ -38,7 +38,7 @@ if [[ -n "${ARROW_GO_TESTCGO}" ]]; then
go_install_arrow_options+=("-tags" "assert,test,ccalloc")
fi

go install "${go_install_arrow_options[@]}" -v ./...
go install "${go_install_arrow_options[@]}" ./...

popd

Expand Down
116 changes: 116 additions & 0 deletions dev/release/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<!---
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->

# Release

## Overview

1. Test the revision to be released
2. Increment version number in `arrow/doc.go`
3. Prepare RC and vote (detailed later)
4. Publish (detailed later)

### Prepare RC and vote

Run `dev/release/release_rc.sh` on a working copy of `[email protected]:apache/arrow-go` not your fork:

```console
$ git clone [email protected]:apache/arrow-go.git
$ dev/release/release_rc.sh ${RC}
raulcd marked this conversation as resolved.
Show resolved Hide resolved
(Send a vote email to [email protected].
You can use a draft shown by release_rc.sh for the email.)
```

Here is an example to release RC1:

```console
$ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release_rc.sh 1
```

The argument of `release_rc.sh` is the RC number. If RC1 has a problem, we'll increment the RC number such as RC2, RC3 and so on.

Requirements to run `release_rc.sh`:

* You must be an Apache Arrow committer or PMC member
* You must prepare your PGP key for signing

If you don't have a PGP key, https://infra.apache.org/release-signing.html#generate may be helpful.

Your PGP key must be registered to the followings:

* https://dist.apache.org/repos/dist/dev/arrow/KEYS
* https://dist.apache.org/repos/dist/release/arrow/KEYS

See the header comment of them how to add a PGP key.

Apache arrow committers can update them by Subversion client with their ASF account. e.g.:

```console
$ svn co https://dist.apache.org/repos/dist/dev/arrow
$ cd arrow
$ editor KEYS
$ svn ci KEYS
```

### Publish

We need to do the followings to publish a new release:

* Publish to apache.org

Run `dev/release/release.sh` to publish to apache.org:

```console
$ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release.sh ${VERSION} ${RC}
```

Here is an example to release 18.0.0 RC1:

```console
$ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release.sh 18.0.0 1
```

Add the release to ASF's report database via [Apache Committee Report Helper](https://reporter.apache.org/addrelease.html?arrow).

### Verify

We have a script to verify a RC.

You must install the following commands to use the script:

* `curl`
* `gpg`
* `shasum` or `sha256sum`/`sha512sum`
* `tar`

You don't need to install Go. If Go doesn't exist in system, the latest Go is automatically installed only for verification.

To verify a RC, run the following command line:

```console
$ dev/release/verify_rc.sh ${VERSION} ${RC}
```

Here is an example to verify the release 18.0.0 RC1:

```console
$ dev/release/verify_rc.sh 18.0.0 1
```

If the verification is successful, the message `RC looks good!` is shown.
Loading
Loading