From b0e2983548e0cc892ba63fbdf7f4700c2c1b40c6 Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Thu, 4 Jan 2024 16:56:30 +0800 Subject: [PATCH 1/4] docs: Add release guide for iceberg-rust Signed-off-by: Xuanwo --- .gitattributes | 1 + .licenserc.yaml | 3 + crates/catalog/hms/DEPENDENCIES.rust.tsv | 290 ++++++++++++++++ crates/catalog/rest/DEPENDENCIES.rust.tsv | 295 +++++++++++++++++ crates/iceberg/DEPENDENCIES.rust.tsv | 284 ++++++++++++++++ crates/test_utils/Cargo.toml | 1 + deny.toml | 45 +++ scripts/dependencies.py | 72 ++++ scripts/release.sh | 68 ++++ website/src/SUMMARY.md | 8 +- website/src/download.md | 19 ++ website/src/reference/setup_gpg.md | 161 +++++++++ website/src/release.md | 383 ++++++++++++++++++++++ 13 files changed, 1629 insertions(+), 1 deletion(-) create mode 100644 .gitattributes create mode 100644 crates/catalog/hms/DEPENDENCIES.rust.tsv create mode 100644 crates/catalog/rest/DEPENDENCIES.rust.tsv create mode 100644 crates/iceberg/DEPENDENCIES.rust.tsv create mode 100644 deny.toml create mode 100644 scripts/dependencies.py create mode 100644 scripts/release.sh create mode 100644 website/src/download.md create mode 100644 website/src/reference/setup_gpg.md create mode 100644 website/src/release.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..908bda4b5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +website export-ignore diff --git a/.licenserc.yaml b/.licenserc.yaml index 662cea8d5..68a8c03b0 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -23,7 +23,10 @@ header: paths-ignore: - 'LICENSE' - 'NOTICE' + - '.gitattributes' - '**/*.json' # Generated content by mdbook - 'website/book' + # Generated content by scripts + - '**/DEPENDENCIES.*.tsv' comment: on-failure diff --git a/crates/catalog/hms/DEPENDENCIES.rust.tsv b/crates/catalog/hms/DEPENDENCIES.rust.tsv new file mode 100644 index 000000000..46fa2457a --- /dev/null +++ b/crates/catalog/hms/DEPENDENCIES.rust.tsv @@ -0,0 +1,290 @@ +crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-3-Clause BSL-1.0 CC0-1.0 ISC MIT OpenSSL Unicode-DFS-2016 Unlicense Zlib +addr2line@0.21.0 X X +adler@1.0.2 X X X +adler32@1.2.0 X +ahash@0.7.6 X X +ahash@0.8.3 X X +android-tzdata@0.1.1 X X +android_system_properties@0.1.5 X X +anyhow@1.0.72 X X +apache-avro@0.16.0 X +arrayvec@0.7.4 X X +arrow-arith@47.0.0 X +arrow-array@47.0.0 X +arrow-buffer@47.0.0 X +arrow-data@47.0.0 X +arrow-schema@47.0.0 X +async-compat@0.2.1 X X +async-trait@0.1.73 X X +autocfg@1.1.0 X X +backon@0.4.1 X +backtrace@0.3.69 X X +base64@0.21.4 X X +base64ct@1.6.0 X X +bimap@0.6.3 X X +bitflags@1.3.2 X X +bitflags@2.4.1 X X +bitvec@1.0.1 X +block-buffer@0.10.4 X X +bumpalo@3.13.0 X X +byteorder@1.4.3 X X +bytes@1.4.0 X +cc@1.0.83 X X +cfg-if@1.0.0 X X +chrono@0.4.31 X X +const-oid@0.9.5 X X +const-random@0.1.15 X X +const-random-macro@0.1.15 X X +core-foundation@0.9.3 X X +core-foundation-sys@0.8.4 X X +core2@0.4.0 X X +cpufeatures@0.2.9 X X +crc32fast@1.3.2 X X +crunchy@0.2.2 X +crypto-common@0.1.6 X X +darling@0.14.4 X +darling@0.20.3 X +darling_core@0.14.4 X +darling_core@0.20.3 X +darling_macro@0.14.4 X +darling_macro@0.20.3 X +dary_heap@0.3.6 X X +der@0.7.8 X X +deranged@0.3.8 X X +derive_builder@0.12.0 X X +derive_builder_core@0.12.0 X X +derive_builder_macro@0.12.0 X X +digest@0.10.7 X X +dlv-list@0.5.1 X X +either@1.9.0 X X +encoding_rs@0.8.33 X X X +fastrand@1.9.0 X X +fastrand@2.0.1 X X +flagset@0.4.4 X +fnv@1.0.7 X X +foreign-types@0.3.2 X X +foreign-types-shared@0.1.1 X X +form_urlencoded@1.2.0 X X +funty@2.0.0 X +futures@0.3.28 X X +futures-channel@0.3.28 X X +futures-core@0.3.28 X X +futures-executor@0.3.28 X X +futures-io@0.3.28 X X +futures-macro@0.3.28 X X +futures-sink@0.3.28 X X +futures-task@0.3.28 X X +futures-util@0.3.28 X X +generic-array@0.14.7 X +getrandom@0.2.10 X X +gimli@0.28.0 X X +h2@0.3.21 X +half@2.3.1 X X +hashbrown@0.12.3 X X +hashbrown@0.13.2 X X +hashbrown@0.14.1 X X +heck@0.4.1 X X +hermit-abi@0.3.3 X X +hex@0.4.3 X X +hive_metastore@0.0.1 X +hmac@0.12.1 X X +home@0.5.5 X X +http@0.2.9 X X +http-body@0.4.5 X +httparse@1.8.0 X X +httpdate@1.0.3 X X +hyper@0.14.27 X +hyper-rustls@0.24.1 X X X +hyper-tls@0.5.0 X X +iana-time-zone@0.1.57 X X +iana-time-zone-haiku@0.1.2 X X +iceberg@0.1.0 X +iceberg-catalog-hms@0.1.0 X +ident_case@1.0.1 X X +idna@0.4.0 X X +indexmap@1.9.3 X X +instant@0.1.12 X +integer-encoding@3.0.4 X +ipnet@2.8.0 X X +itertools@0.12.0 X X +itoa@1.0.9 X X +js-sys@0.3.64 X X +jsonwebtoken@9.2.0 X +lazy_static@1.4.0 X X +libc@0.2.150 X X +libflate@2.0.0 X +libflate_lz77@2.0.0 X +libm@0.2.7 X X +linux-raw-sys@0.4.12 X X X +lock_api@0.4.10 X X +log@0.4.20 X X +md-5@0.10.5 X X +memchr@2.5.0 X X +mime@0.3.17 X X +miniz_oxide@0.7.1 X X X +mio@0.8.8 X +murmur3@0.5.2 X X +native-tls@0.2.11 X X +num@0.4.1 X X +num-bigint@0.4.4 X X +num-bigint-dig@0.8.4 X X +num-complex@0.4.4 X X +num-integer@0.1.45 X X +num-iter@0.1.43 X X +num-rational@0.4.1 X X +num-traits@0.2.16 X X +num_cpus@1.16.0 X X +object@0.32.1 X X +once_cell@1.18.0 X X +opendal@0.44.0 X +openssl@0.10.60 X +openssl-macros@0.1.1 X X +openssl-probe@0.1.5 X X +openssl-sys@0.9.96 X +ordered-float@3.9.2 X +ordered-float@4.1.1 X +ordered-multimap@0.7.1 X +parking_lot@0.12.1 X X +parking_lot_core@0.9.8 X X +pem@3.0.3 X +pem-rfc7468@0.7.0 X X +percent-encoding@2.3.0 X X +pin-project@1.1.3 X X +pin-project-internal@1.1.3 X X +pin-project-lite@0.2.13 X X +pin-utils@0.1.0 X X +pkcs1@0.7.5 X X +pkcs8@0.10.2 X X +pkg-config@0.3.27 X X +ppv-lite86@0.2.17 X X +proc-macro-hack@0.5.20+deprecated X X +proc-macro2@1.0.66 X X +quad-rand@0.2.1 X +quick-xml@0.30.0 X +quick-xml@0.31.0 X +quote@1.0.32 X X +radium@0.7.0 X +rand@0.8.5 X X +rand_chacha@0.3.1 X X +rand_core@0.6.4 X X +redox_syscall@0.3.5 X +redox_syscall@0.4.1 X +regex-lite@0.1.5 X X +reqsign@0.14.6 X +reqwest@0.11.20 X X +ring@0.16.20 X +ring@0.17.7 X +rle-decode-fast@1.0.3 X X +rsa@0.9.2 X X +rust-ini@0.20.0 X +rust_decimal@1.32.0 X +rustc-demangle@0.1.23 X X +rustix@0.38.26 X X X +rustls@0.21.7 X X X +rustls-native-certs@0.6.3 X X X +rustls-pemfile@1.0.3 X X X +rustls-webpki@0.101.5 X +rustversion@1.0.14 X X +ryu@1.0.15 X X +schannel@0.1.22 X +scopeguard@1.2.0 X X +sct@0.7.0 X X X +security-framework@2.9.2 X X +security-framework-sys@2.9.1 X X +serde@1.0.189 X X +serde_bytes@0.11.12 X X +serde_derive@1.0.189 X X +serde_json@1.0.107 X X +serde_repr@0.1.16 X X +serde_urlencoded@0.7.1 X X +serde_with@3.4.0 X X +serde_with_macros@3.4.0 X X +sha1@0.10.5 X X +sha2@0.10.7 X X +signal-hook-registry@1.4.1 X X +signature@2.1.0 X X +simple_asn1@0.6.2 X +slab@0.4.9 X +smallvec@1.11.0 X X +socket2@0.4.9 X X +socket2@0.5.4 X X +spin@0.5.2 X +spin@0.9.8 X +spki@0.7.2 X X +strsim@0.10.0 X +strum@0.25.0 X +strum_macros@0.25.3 X +subtle@2.5.0 X +syn@1.0.109 X X +syn@2.0.32 X X +tap@1.0.1 X +tempfile@3.8.1 X X +tent-thrift@0.18.1 X +thiserror@1.0.49 X X +thiserror-impl@1.0.49 X X +threadpool@1.8.1 X X +time@0.3.25 X X +time-core@0.1.1 X X +time-macros@0.2.11 X X +tiny-keccak@2.0.2 X +tinyvec@1.6.0 X X X +tinyvec_macros@0.1.1 X X X +tokio@1.32.0 X +tokio-macros@2.1.0 X +tokio-native-tls@0.3.1 X +tokio-rustls@0.24.1 X X +tokio-util@0.7.8 X +tower-service@0.3.2 X +tracing@0.1.37 X +tracing-core@0.1.31 X +try-lock@0.2.4 X +typed-builder@0.16.2 X X +typed-builder@0.18.0 X X +typed-builder-macro@0.16.2 X X +typed-builder-macro@0.18.0 X X +typenum@1.16.0 X X +unicode-bidi@0.3.13 X X +unicode-ident@1.0.11 X X X +unicode-normalization@0.1.22 X X +untrusted@0.7.1 X +untrusted@0.9.0 X +url@2.4.1 X X +urlencoding@2.1.3 X +uuid@1.6.1 X X +vcpkg@0.2.15 X X +version_check@0.9.4 X X +want@0.3.1 X +wasi@0.11.0+wasi-snapshot-preview1 X X X +wasm-bindgen@0.2.87 X X +wasm-bindgen-backend@0.2.87 X X +wasm-bindgen-futures@0.4.37 X X +wasm-bindgen-macro@0.2.87 X X +wasm-bindgen-macro-support@0.2.87 X X +wasm-bindgen-shared@0.2.87 X X +wasm-streams@0.3.0 X X +web-sys@0.3.64 X X +winapi@0.3.9 X X +winapi-i686-pc-windows-gnu@0.4.0 X X +winapi-x86_64-pc-windows-gnu@0.4.0 X X +windows@0.48.0 X X +windows-sys@0.48.0 X X +windows-sys@0.52.0 X X +windows-targets@0.48.1 X X +windows-targets@0.52.0 X X +windows_aarch64_gnullvm@0.48.0 X X +windows_aarch64_gnullvm@0.52.0 X X +windows_aarch64_msvc@0.48.0 X X +windows_aarch64_msvc@0.52.0 X X +windows_i686_gnu@0.48.0 X X +windows_i686_gnu@0.52.0 X X +windows_i686_msvc@0.48.0 X X +windows_i686_msvc@0.52.0 X X +windows_x86_64_gnu@0.48.0 X X +windows_x86_64_gnu@0.52.0 X X +windows_x86_64_gnullvm@0.48.0 X X +windows_x86_64_gnullvm@0.52.0 X X +windows_x86_64_msvc@0.48.0 X X +windows_x86_64_msvc@0.52.0 X X +winreg@0.50.0 X +wyz@0.5.1 X +zeroize@1.6.0 X X diff --git a/crates/catalog/rest/DEPENDENCIES.rust.tsv b/crates/catalog/rest/DEPENDENCIES.rust.tsv new file mode 100644 index 000000000..7e56620ad --- /dev/null +++ b/crates/catalog/rest/DEPENDENCIES.rust.tsv @@ -0,0 +1,295 @@ +crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-3-Clause BSL-1.0 CC0-1.0 ISC MIT OpenSSL Unicode-DFS-2016 Unlicense Zlib +addr2line@0.21.0 X X +adler@1.0.2 X X X +adler32@1.2.0 X +ahash@0.7.6 X X +ahash@0.8.3 X X +aho-corasick@1.1.2 X X +android-tzdata@0.1.1 X X +android_system_properties@0.1.5 X X +anyhow@1.0.72 X X +apache-avro@0.16.0 X +arrayvec@0.7.4 X X +arrow-arith@47.0.0 X +arrow-array@47.0.0 X +arrow-buffer@47.0.0 X +arrow-data@47.0.0 X +arrow-schema@47.0.0 X +async-compat@0.2.1 X X +async-trait@0.1.73 X X +autocfg@1.1.0 X X +backon@0.4.1 X +backtrace@0.3.69 X X +base64@0.21.4 X X +base64ct@1.6.0 X X +bimap@0.6.3 X X +bitflags@1.3.2 X X +bitflags@2.4.1 X X +bitvec@1.0.1 X +block-buffer@0.10.4 X X +bumpalo@3.13.0 X X +byteorder@1.4.3 X X +bytes@1.4.0 X +cc@1.0.83 X X +cfg-if@1.0.0 X X +chrono@0.4.31 X X +const-oid@0.9.5 X X +const-random@0.1.15 X X +const-random-macro@0.1.15 X X +core-foundation@0.9.3 X X +core-foundation-sys@0.8.4 X X +core2@0.4.0 X X +cpufeatures@0.2.9 X X +crc32fast@1.3.2 X X +crunchy@0.2.2 X +crypto-common@0.1.6 X X +darling@0.14.4 X +darling@0.20.3 X +darling_core@0.14.4 X +darling_core@0.20.3 X +darling_macro@0.14.4 X +darling_macro@0.20.3 X +dary_heap@0.3.6 X X +der@0.7.8 X X +deranged@0.3.8 X X +derive_builder@0.12.0 X X +derive_builder_core@0.12.0 X X +derive_builder_macro@0.12.0 X X +digest@0.10.7 X X +dlv-list@0.5.1 X X +either@1.9.0 X X +encoding_rs@0.8.33 X X X +env_logger@0.10.1 X X +fastrand@1.9.0 X X +fastrand@2.0.1 X X +flagset@0.4.4 X +fnv@1.0.7 X X +foreign-types@0.3.2 X X +foreign-types-shared@0.1.1 X X +form_urlencoded@1.2.0 X X +funty@2.0.0 X +futures@0.3.28 X X +futures-channel@0.3.28 X X +futures-core@0.3.28 X X +futures-executor@0.3.28 X X +futures-io@0.3.28 X X +futures-macro@0.3.28 X X +futures-sink@0.3.28 X X +futures-task@0.3.28 X X +futures-util@0.3.28 X X +generic-array@0.14.7 X +getrandom@0.2.10 X X +gimli@0.28.0 X X +h2@0.3.21 X +half@2.3.1 X X +hashbrown@0.12.3 X X +hashbrown@0.13.2 X X +hashbrown@0.14.1 X X +heck@0.4.1 X X +hermit-abi@0.3.3 X X +hex@0.4.3 X X +hmac@0.12.1 X X +home@0.5.5 X X +http@0.2.9 X X +http-body@0.4.5 X +httparse@1.8.0 X X +httpdate@1.0.3 X X +humantime@2.1.0 X X +hyper@0.14.27 X +hyper-rustls@0.24.1 X X X +hyper-tls@0.5.0 X X +iana-time-zone@0.1.57 X X +iana-time-zone-haiku@0.1.2 X X +iceberg@0.1.0 X +iceberg-catalog-rest@0.1.0 X +iceberg_test_utils@0.1.0 X +ident_case@1.0.1 X X +idna@0.4.0 X X +indexmap@1.9.3 X X +instant@0.1.12 X +ipnet@2.8.0 X X +is-terminal@0.4.9 X +itertools@0.12.0 X X +itoa@1.0.9 X X +js-sys@0.3.64 X X +jsonwebtoken@9.2.0 X +lazy_static@1.4.0 X X +libc@0.2.150 X X +libflate@2.0.0 X +libflate_lz77@2.0.0 X +libm@0.2.7 X X +linux-raw-sys@0.4.12 X X X +lock_api@0.4.10 X X +log@0.4.20 X X +md-5@0.10.5 X X +memchr@2.5.0 X X +mime@0.3.17 X X +miniz_oxide@0.7.1 X X X +mio@0.8.8 X +murmur3@0.5.2 X X +native-tls@0.2.11 X X +num@0.4.1 X X +num-bigint@0.4.4 X X +num-bigint-dig@0.8.4 X X +num-complex@0.4.4 X X +num-integer@0.1.45 X X +num-iter@0.1.43 X X +num-rational@0.4.1 X X +num-traits@0.2.16 X X +num_cpus@1.16.0 X X +object@0.32.1 X X +once_cell@1.18.0 X X +opendal@0.44.0 X +openssl@0.10.60 X +openssl-macros@0.1.1 X X +openssl-probe@0.1.5 X X +openssl-sys@0.9.96 X +ordered-float@4.1.1 X +ordered-multimap@0.7.1 X +parking_lot@0.12.1 X X +parking_lot_core@0.9.8 X X +pem@3.0.3 X +pem-rfc7468@0.7.0 X X +percent-encoding@2.3.0 X X +pin-project@1.1.3 X X +pin-project-internal@1.1.3 X X +pin-project-lite@0.2.13 X X +pin-utils@0.1.0 X X +pkcs1@0.7.5 X X +pkcs8@0.10.2 X X +pkg-config@0.3.27 X X +ppv-lite86@0.2.17 X X +proc-macro-hack@0.5.20+deprecated X X +proc-macro2@1.0.66 X X +quad-rand@0.2.1 X +quick-xml@0.30.0 X +quick-xml@0.31.0 X +quote@1.0.32 X X +radium@0.7.0 X +rand@0.8.5 X X +rand_chacha@0.3.1 X X +rand_core@0.6.4 X X +redox_syscall@0.3.5 X +redox_syscall@0.4.1 X +regex@1.9.4 X X +regex-automata@0.3.7 X X +regex-lite@0.1.5 X X +regex-syntax@0.7.5 X X +reqsign@0.14.6 X +reqwest@0.11.20 X X +ring@0.16.20 X +ring@0.17.7 X +rle-decode-fast@1.0.3 X X +rsa@0.9.2 X X +rust-ini@0.20.0 X +rust_decimal@1.32.0 X +rustc-demangle@0.1.23 X X +rustix@0.38.26 X X X +rustls@0.21.7 X X X +rustls-native-certs@0.6.3 X X X +rustls-pemfile@1.0.3 X X X +rustls-webpki@0.101.5 X +rustversion@1.0.14 X X +ryu@1.0.15 X X +schannel@0.1.22 X +scopeguard@1.2.0 X X +sct@0.7.0 X X X +security-framework@2.9.2 X X +security-framework-sys@2.9.1 X X +serde@1.0.189 X X +serde_bytes@0.11.12 X X +serde_derive@1.0.189 X X +serde_json@1.0.107 X X +serde_repr@0.1.16 X X +serde_urlencoded@0.7.1 X X +serde_with@3.4.0 X X +serde_with_macros@3.4.0 X X +sha1@0.10.5 X X +sha2@0.10.7 X X +signal-hook-registry@1.4.1 X X +signature@2.1.0 X X +simple_asn1@0.6.2 X +slab@0.4.9 X +smallvec@1.11.0 X X +socket2@0.4.9 X X +socket2@0.5.4 X X +spin@0.5.2 X +spin@0.9.8 X +spki@0.7.2 X X +strsim@0.10.0 X +strum@0.25.0 X +strum_macros@0.25.3 X +subtle@2.5.0 X +syn@1.0.109 X X +syn@2.0.32 X X +tap@1.0.1 X +tempfile@3.8.1 X X +termcolor@1.4.0 X X +thiserror@1.0.49 X X +thiserror-impl@1.0.49 X X +time@0.3.25 X X +time-core@0.1.1 X X +time-macros@0.2.11 X X +tiny-keccak@2.0.2 X +tinyvec@1.6.0 X X X +tinyvec_macros@0.1.1 X X X +tokio@1.32.0 X +tokio-macros@2.1.0 X +tokio-native-tls@0.3.1 X +tokio-rustls@0.24.1 X X +tokio-util@0.7.8 X +tower-service@0.3.2 X +tracing@0.1.37 X +tracing-core@0.1.31 X +try-lock@0.2.4 X +typed-builder@0.16.2 X X +typed-builder@0.18.0 X X +typed-builder-macro@0.16.2 X X +typed-builder-macro@0.18.0 X X +typenum@1.16.0 X X +unicode-bidi@0.3.13 X X +unicode-ident@1.0.11 X X X +unicode-normalization@0.1.22 X X +untrusted@0.7.1 X +untrusted@0.9.0 X +url@2.4.1 X X +urlencoding@2.1.3 X +uuid@1.6.1 X X +vcpkg@0.2.15 X X +version_check@0.9.4 X X +want@0.3.1 X +wasi@0.11.0+wasi-snapshot-preview1 X X X +wasm-bindgen@0.2.87 X X +wasm-bindgen-backend@0.2.87 X X +wasm-bindgen-futures@0.4.37 X X +wasm-bindgen-macro@0.2.87 X X +wasm-bindgen-macro-support@0.2.87 X X +wasm-bindgen-shared@0.2.87 X X +wasm-streams@0.3.0 X X +web-sys@0.3.64 X X +winapi@0.3.9 X X +winapi-i686-pc-windows-gnu@0.4.0 X X +winapi-util@0.1.6 X X +winapi-x86_64-pc-windows-gnu@0.4.0 X X +windows@0.48.0 X X +windows-sys@0.48.0 X X +windows-sys@0.52.0 X X +windows-targets@0.48.1 X X +windows-targets@0.52.0 X X +windows_aarch64_gnullvm@0.48.0 X X +windows_aarch64_gnullvm@0.52.0 X X +windows_aarch64_msvc@0.48.0 X X +windows_aarch64_msvc@0.52.0 X X +windows_i686_gnu@0.48.0 X X +windows_i686_gnu@0.52.0 X X +windows_i686_msvc@0.48.0 X X +windows_i686_msvc@0.52.0 X X +windows_x86_64_gnu@0.48.0 X X +windows_x86_64_gnu@0.52.0 X X +windows_x86_64_gnullvm@0.48.0 X X +windows_x86_64_gnullvm@0.52.0 X X +windows_x86_64_msvc@0.48.0 X X +windows_x86_64_msvc@0.52.0 X X +winreg@0.50.0 X +wyz@0.5.1 X +zeroize@1.6.0 X X diff --git a/crates/iceberg/DEPENDENCIES.rust.tsv b/crates/iceberg/DEPENDENCIES.rust.tsv new file mode 100644 index 000000000..3979e6906 --- /dev/null +++ b/crates/iceberg/DEPENDENCIES.rust.tsv @@ -0,0 +1,284 @@ +crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-3-Clause BSL-1.0 CC0-1.0 ISC MIT OpenSSL Unicode-DFS-2016 Unlicense Zlib +addr2line@0.21.0 X X +adler@1.0.2 X X X +adler32@1.2.0 X +ahash@0.7.6 X X +ahash@0.8.3 X X +android-tzdata@0.1.1 X X +android_system_properties@0.1.5 X X +anyhow@1.0.72 X X +apache-avro@0.16.0 X +arrayvec@0.7.4 X X +arrow-arith@47.0.0 X +arrow-array@47.0.0 X +arrow-buffer@47.0.0 X +arrow-data@47.0.0 X +arrow-schema@47.0.0 X +async-compat@0.2.1 X X +async-trait@0.1.73 X X +autocfg@1.1.0 X X +backon@0.4.1 X +backtrace@0.3.69 X X +base64@0.21.4 X X +base64ct@1.6.0 X X +bimap@0.6.3 X X +bitflags@1.3.2 X X +bitflags@2.4.1 X X +bitvec@1.0.1 X +block-buffer@0.10.4 X X +bumpalo@3.13.0 X X +byteorder@1.4.3 X X +bytes@1.4.0 X +cc@1.0.83 X X +cfg-if@1.0.0 X X +chrono@0.4.31 X X +const-oid@0.9.5 X X +const-random@0.1.15 X X +const-random-macro@0.1.15 X X +core-foundation@0.9.3 X X +core-foundation-sys@0.8.4 X X +core2@0.4.0 X X +cpufeatures@0.2.9 X X +crc32fast@1.3.2 X X +crunchy@0.2.2 X +crypto-common@0.1.6 X X +darling@0.14.4 X +darling@0.20.3 X +darling_core@0.14.4 X +darling_core@0.20.3 X +darling_macro@0.14.4 X +darling_macro@0.20.3 X +dary_heap@0.3.6 X X +der@0.7.8 X X +deranged@0.3.8 X X +derive_builder@0.12.0 X X +derive_builder_core@0.12.0 X X +derive_builder_macro@0.12.0 X X +digest@0.10.7 X X +dlv-list@0.5.1 X X +either@1.9.0 X X +encoding_rs@0.8.33 X X X +fastrand@1.9.0 X X +fastrand@2.0.1 X X +flagset@0.4.4 X +fnv@1.0.7 X X +foreign-types@0.3.2 X X +foreign-types-shared@0.1.1 X X +form_urlencoded@1.2.0 X X +funty@2.0.0 X +futures@0.3.28 X X +futures-channel@0.3.28 X X +futures-core@0.3.28 X X +futures-executor@0.3.28 X X +futures-io@0.3.28 X X +futures-macro@0.3.28 X X +futures-sink@0.3.28 X X +futures-task@0.3.28 X X +futures-util@0.3.28 X X +generic-array@0.14.7 X +getrandom@0.2.10 X X +gimli@0.28.0 X X +h2@0.3.21 X +half@2.3.1 X X +hashbrown@0.12.3 X X +hashbrown@0.13.2 X X +hashbrown@0.14.1 X X +heck@0.4.1 X X +hermit-abi@0.3.3 X X +hex@0.4.3 X X +hmac@0.12.1 X X +home@0.5.5 X X +http@0.2.9 X X +http-body@0.4.5 X +httparse@1.8.0 X X +httpdate@1.0.3 X X +hyper@0.14.27 X +hyper-rustls@0.24.1 X X X +hyper-tls@0.5.0 X X +iana-time-zone@0.1.57 X X +iana-time-zone-haiku@0.1.2 X X +iceberg@0.1.0 X +ident_case@1.0.1 X X +idna@0.4.0 X X +indexmap@1.9.3 X X +instant@0.1.12 X +ipnet@2.8.0 X X +itertools@0.12.0 X X +itoa@1.0.9 X X +js-sys@0.3.64 X X +jsonwebtoken@9.2.0 X +lazy_static@1.4.0 X X +libc@0.2.150 X X +libflate@2.0.0 X +libflate_lz77@2.0.0 X +libm@0.2.7 X X +linux-raw-sys@0.4.12 X X X +lock_api@0.4.10 X X +log@0.4.20 X X +md-5@0.10.5 X X +memchr@2.5.0 X X +mime@0.3.17 X X +miniz_oxide@0.7.1 X X X +mio@0.8.8 X +murmur3@0.5.2 X X +native-tls@0.2.11 X X +num@0.4.1 X X +num-bigint@0.4.4 X X +num-bigint-dig@0.8.4 X X +num-complex@0.4.4 X X +num-integer@0.1.45 X X +num-iter@0.1.43 X X +num-rational@0.4.1 X X +num-traits@0.2.16 X X +num_cpus@1.16.0 X X +object@0.32.1 X X +once_cell@1.18.0 X X +opendal@0.44.0 X +openssl@0.10.60 X +openssl-macros@0.1.1 X X +openssl-probe@0.1.5 X X +openssl-sys@0.9.96 X +ordered-float@4.1.1 X +ordered-multimap@0.7.1 X +parking_lot@0.12.1 X X +parking_lot_core@0.9.8 X X +pem@3.0.3 X +pem-rfc7468@0.7.0 X X +percent-encoding@2.3.0 X X +pin-project@1.1.3 X X +pin-project-internal@1.1.3 X X +pin-project-lite@0.2.13 X X +pin-utils@0.1.0 X X +pkcs1@0.7.5 X X +pkcs8@0.10.2 X X +pkg-config@0.3.27 X X +ppv-lite86@0.2.17 X X +proc-macro-hack@0.5.20+deprecated X X +proc-macro2@1.0.66 X X +quad-rand@0.2.1 X +quick-xml@0.30.0 X +quick-xml@0.31.0 X +quote@1.0.32 X X +radium@0.7.0 X +rand@0.8.5 X X +rand_chacha@0.3.1 X X +rand_core@0.6.4 X X +redox_syscall@0.3.5 X +redox_syscall@0.4.1 X +regex-lite@0.1.5 X X +reqsign@0.14.6 X +reqwest@0.11.20 X X +ring@0.16.20 X +ring@0.17.7 X +rle-decode-fast@1.0.3 X X +rsa@0.9.2 X X +rust-ini@0.20.0 X +rust_decimal@1.32.0 X +rustc-demangle@0.1.23 X X +rustix@0.38.26 X X X +rustls@0.21.7 X X X +rustls-native-certs@0.6.3 X X X +rustls-pemfile@1.0.3 X X X +rustls-webpki@0.101.5 X +rustversion@1.0.14 X X +ryu@1.0.15 X X +schannel@0.1.22 X +scopeguard@1.2.0 X X +sct@0.7.0 X X X +security-framework@2.9.2 X X +security-framework-sys@2.9.1 X X +serde@1.0.189 X X +serde_bytes@0.11.12 X X +serde_derive@1.0.189 X X +serde_json@1.0.107 X X +serde_repr@0.1.16 X X +serde_urlencoded@0.7.1 X X +serde_with@3.4.0 X X +serde_with_macros@3.4.0 X X +sha1@0.10.5 X X +sha2@0.10.7 X X +signal-hook-registry@1.4.1 X X +signature@2.1.0 X X +simple_asn1@0.6.2 X +slab@0.4.9 X +smallvec@1.11.0 X X +socket2@0.4.9 X X +socket2@0.5.4 X X +spin@0.5.2 X +spin@0.9.8 X +spki@0.7.2 X X +strsim@0.10.0 X +strum@0.25.0 X +strum_macros@0.25.3 X +subtle@2.5.0 X +syn@1.0.109 X X +syn@2.0.32 X X +tap@1.0.1 X +tempfile@3.8.1 X X +thiserror@1.0.49 X X +thiserror-impl@1.0.49 X X +time@0.3.25 X X +time-core@0.1.1 X X +time-macros@0.2.11 X X +tiny-keccak@2.0.2 X +tinyvec@1.6.0 X X X +tinyvec_macros@0.1.1 X X X +tokio@1.32.0 X +tokio-macros@2.1.0 X +tokio-native-tls@0.3.1 X +tokio-rustls@0.24.1 X X +tokio-util@0.7.8 X +tower-service@0.3.2 X +tracing@0.1.37 X +tracing-core@0.1.31 X +try-lock@0.2.4 X +typed-builder@0.16.2 X X +typed-builder@0.18.0 X X +typed-builder-macro@0.16.2 X X +typed-builder-macro@0.18.0 X X +typenum@1.16.0 X X +unicode-bidi@0.3.13 X X +unicode-ident@1.0.11 X X X +unicode-normalization@0.1.22 X X +untrusted@0.7.1 X +untrusted@0.9.0 X +url@2.4.1 X X +urlencoding@2.1.3 X +uuid@1.6.1 X X +vcpkg@0.2.15 X X +version_check@0.9.4 X X +want@0.3.1 X +wasi@0.11.0+wasi-snapshot-preview1 X X X +wasm-bindgen@0.2.87 X X +wasm-bindgen-backend@0.2.87 X X +wasm-bindgen-futures@0.4.37 X X +wasm-bindgen-macro@0.2.87 X X +wasm-bindgen-macro-support@0.2.87 X X +wasm-bindgen-shared@0.2.87 X X +wasm-streams@0.3.0 X X +web-sys@0.3.64 X X +winapi@0.3.9 X X +winapi-i686-pc-windows-gnu@0.4.0 X X +winapi-x86_64-pc-windows-gnu@0.4.0 X X +windows@0.48.0 X X +windows-sys@0.48.0 X X +windows-sys@0.52.0 X X +windows-targets@0.48.1 X X +windows-targets@0.52.0 X X +windows_aarch64_gnullvm@0.48.0 X X +windows_aarch64_gnullvm@0.52.0 X X +windows_aarch64_msvc@0.48.0 X X +windows_aarch64_msvc@0.52.0 X X +windows_i686_gnu@0.48.0 X X +windows_i686_gnu@0.52.0 X X +windows_i686_msvc@0.48.0 X X +windows_i686_msvc@0.52.0 X X +windows_x86_64_gnu@0.48.0 X X +windows_x86_64_gnu@0.52.0 X X +windows_x86_64_gnullvm@0.48.0 X X +windows_x86_64_gnullvm@0.52.0 X X +windows_x86_64_msvc@0.48.0 X X +windows_x86_64_msvc@0.52.0 X X +winreg@0.50.0 X +wyz@0.5.1 X +zeroize@1.6.0 X X diff --git a/crates/test_utils/Cargo.toml b/crates/test_utils/Cargo.toml index 91210c50f..7f10f7e7f 100644 --- a/crates/test_utils/Cargo.toml +++ b/crates/test_utils/Cargo.toml @@ -19,6 +19,7 @@ name = "iceberg_test_utils" version = "0.1.0" edition = "2021" +license = "Apache-2.0" [dependencies] env_logger = { workspace = true } diff --git a/deny.toml b/deny.toml new file mode 100644 index 000000000..e32367948 --- /dev/null +++ b/deny.toml @@ -0,0 +1,45 @@ +# 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. + +[licenses] +unlicensed = "deny" +copyleft = "deny" +allow = [ + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "MIT", + "BSD-3-Clause", + "ISC", + "CC0-1.0", +] +exceptions = [ + { allow = ["OpenSSL"], name = "ring" }, + { allow = ["Unicode-DFS-2016"], name = "unicode-ident" }, + { allow = ["Zlib"], name = "adler32" } +] + +[[licenses.clarify]] +name = "ring" +# SPDX considers OpenSSL to encompass both the OpenSSL and SSLeay licenses +# https://spdx.org/licenses/OpenSSL.html +# ISC - Both BoringSSL and ring use this for their new files +# MIT - "Files in third_party/ have their own licenses, as described therein. The MIT +# license, for third_party/fiat, which, unlike other third_party directories, is +# compiled into non-test libraries, is included below." +# OpenSSL - Obviously +expression = "ISC AND MIT AND OpenSSL" +license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] \ No newline at end of file diff --git a/scripts/dependencies.py b/scripts/dependencies.py new file mode 100644 index 000000000..13bb44555 --- /dev/null +++ b/scripts/dependencies.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# 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. + +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, REMAINDER +import subprocess +import os + + +DIRS = [ + "crates/iceberg", + "crates/catalog/hms", + "crates/catalog/rest" +] + + +def check_deps(): + cargo_dirs = DIRS + for root in cargo_dirs: + print(f"Checking dependencies of {root}") + subprocess.run(["cargo", "deny", "check", "license"], cwd=root) + + +def generate_deps(): + cargo_dirs = DIRS + for root in cargo_dirs: + print(f"Generating dependencies {root}") + result = subprocess.run( + ["cargo", "deny", "list", "-f", "tsv", "-t", "0.6"], + cwd=root, + capture_output=True, + text=True, + ) + with open(f"{root}/DEPENDENCIES.rust.tsv", "w") as f: + f.write(result.stdout) + + +if __name__ == "__main__": + parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) + parser.set_defaults(func=parser.print_help) + subparsers = parser.add_subparsers() + + parser_check = subparsers.add_parser( + 'check', + description="Check dependencies", + help="Check dependencies") + parser_check.set_defaults(func=check_deps) + + parser_generate = subparsers.add_parser( + 'generate', + description="Generate dependencies", + help="Generate dependencies") + parser_generate.set_defaults(func=generate_deps) + + args = parser.parse_args() + arg_dict = dict(vars(args)) + del arg_dict['func'] + args.func(**arg_dict) diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100644 index 000000000..884ed8a0a --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# 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. + +set -e + +if [ -z "${ICEBERG_VERSION}" ]; then + echo "ICEBERG_VERSION is unset" + exit 1 +else + echo "var is set to '$ICEBERG_VERSION'" +fi + +# tar source code +release_version=${ICEBERG_VERSION} +# rc versions +rc_version="${ICEBERG_VERSION_RC:-rc.1}" +# Corresponding git repository branch +git_branch=release-${release_version}-${rc_version} + +rm -rf dist +mkdir -p dist/ + +echo "> Checkout version branch" +git checkout -B "${git_branch}" + +echo "> Start package" +git archive --format=tar.gz --output="dist/apache-iceberg-rust-$release_version-src.tar.gz" --prefix="apache-iceberg-rust-$release_version-src/" --add-file=Cargo.toml "$git_branch" + +cd dist +echo "> Generate signature" +for i in *.tar.gz; do + echo "$i" + gpg --armor --output "$i.asc" --detach-sig "$i" +done +echo "> Check signature" +for i in *.tar.gz; do + echo "$i" + gpg --verify "$i.asc" "$i" +done +echo "> Generate sha512sum" +for i in *.tar.gz; do + echo "$i" + sha512sum "$i" >"$i.sha512" +done +echo "> Check sha512sum" +for i in *.tar.gz; do + echo "$i" + sha512sum --check "$i.sha512" +done + +cd .. +echo "> Check license" +docker run -it --rm -v $(pwd):/github/workspace apache/skywalking-eyes header check diff --git a/website/src/SUMMARY.md b/website/src/SUMMARY.md index c0aa07fbc..de0978041 100644 --- a/website/src/SUMMARY.md +++ b/website/src/SUMMARY.md @@ -22,7 +22,13 @@ # User Guide - [Install](./install.md) +- [Download](./download.md) # Developer Guide -- [Contributing](./CONTRIBUTING.md) \ No newline at end of file +- [Contributing](./CONTRIBUTING.md) +- [Release](./release.md) + +# Reference + +- [Setup GPG key](./reference/setup_gpg.md) \ No newline at end of file diff --git a/website/src/download.md b/website/src/download.md new file mode 100644 index 000000000..e27485396 --- /dev/null +++ b/website/src/download.md @@ -0,0 +1,19 @@ + + diff --git a/website/src/reference/setup_gpg.md b/website/src/reference/setup_gpg.md new file mode 100644 index 000000000..0cf58317c --- /dev/null +++ b/website/src/reference/setup_gpg.md @@ -0,0 +1,161 @@ + + +# Setup GPG key + +> This section is a brief from the [Cryptography with OpenPGP](https://infra.apache.org/openpgp.html) guideline. + + +## Install GPG + +For more details, please refer to [GPG official website](https://www.gnupg.org/download/index.html). Here shows one approach to install GPG with `apt`: + +```shell +sudo apt install gnupg2 +``` + +## Generate GPG Key + +Attentions: + +- Name is best to keep consistent with your full name of Apache ID; +- Email should be the Apache email; +- Name is best to only use English to avoid garbled. + +Run `gpg --full-gen-key` and complete the generation interactively: + +```shell +gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc. +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) + (14) Existing key from card +Your selection? 1 # input 1 +RSA keys may be between 1024 and 4096 bits long. +What keysize do you want? (2048) 4096 # input 4096 +Requested keysize is 4096 bits +Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years +Key is valid for? (0) 0 # input 0 +Key does not expire at all +Is this correct? (y/N) y # input y + +GnuPG needs to construct a user ID to identify your key. + +Real name: Hulk Lin # input your name +Email address: hulk@apache.org # input your email +Comment: # input some annotations, optional +You selected this USER-ID: + "Hulk " + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # input O +We need to generate a lot of random bytes. It is a good idea to perform +some other action (type on the keyboard, move the mouse, utilize the +disks) during the prime generation; this gives the random number +generator a better chance to gain enough entropy. +We need to generate a lot of random bytes. It is a good idea to perform +some other action (type on the keyboard, move the mouse, utilize the +disks) during the prime generation; this gives the random number +generator a better chance to gain enough entropy. + +# Input the security key +┌──────────────────────────────────────────────────────┐ +│ Please enter this passphrase │ +│ │ +│ Passphrase: _______________________________ │ +│ │ +│ │ +└──────────────────────────────────────────────────────┘ +# key generation will be done after your inputting the key with the following output +gpg: key E49B00F626B marked as ultimately trusted +gpg: revocation certificate stored as '/Users/hulk/.gnupg/openpgp-revocs.d/F77B887A4F25A9468C513E9AA3008E49B00F626B.rev' +public and secret key created and signed. + +pub rsa4096 2022-07-12 [SC] + F77B887A4F25A9468C513E9AA3008E49B00F626B +uid [ultimate] hulk +sub rsa4096 2022-07-12 [E] +``` + +## Upload your key to public GPG keyserver + +Firstly, list your key: + +```shell +gpg --list-keys +``` + +The output is like: + +```shell +------------------------------- +pub rsa4096 2022-07-12 [SC] + F77B887A4F25A9468C513E9AA3008E49B00F626B +uid [ultimate] hulk +sub rsa4096 2022-07-12 [E] +``` + +Then, send your key id to key server: + +```shell +gpg --keyserver keys.openpgp.org --send-key # e.g., F77B887A4F25A9468C513E9AA3008E49B00F626B +``` + +Among them, `keys.openpgp.org` is a randomly selected keyserver, you can use `keyserver.ubuntu.com` or any other full-featured keyserver. + +## Check whether the key is created successfully + +Uploading takes about one minute; after that, you can check by your email at the corresponding keyserver. + +Uploading keys to the keyserver is mainly for joining a [Web of Trust](https://infra.apache.org/release-signing.html#web-of-trust). + +## Add your GPG public key to the KEYS document + +:::info + +`SVN` is required for this step. + +::: + +The svn repository of the release branch is: https://dist.apache.org/repos/dist/release/incubator/opendal + +Please always add the public key to KEYS in the release branch: + +```shell +svn co https://dist.apache.org/repos/dist/release/incubator/opendal opendal-dist +# As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it. +cd opendal-dist +(gpg --list-sigs YOUR_NAME@apache.org && gpg --export --armor YOUR_NAME@apache.org) >> KEYS # Append your key to the KEYS file +svn add . # It is not needed if the KEYS document exists before. +svn ci -m "add gpg key for YOUR_NAME" # Later on, if you are asked to enter a username and password, just use your apache username and password. +``` + +## Upload the GPG public key to your GitHub account + +- Enter https://github.com/settings/keys to add your GPG key. +- Please remember to bind the email address used in the GPG key to your GitHub account (https://github.com/settings/emails) if you find "unverified" after adding it. diff --git a/website/src/release.md b/website/src/release.md new file mode 100644 index 000000000..b56301720 --- /dev/null +++ b/website/src/release.md @@ -0,0 +1,383 @@ + + +This document mainly introduces how the release manager releases a new version in accordance with the Apache requirements. + +## Introduction + +`Source Release` is the key point which Apache values, and is also necessary for an ASF release. + +Please remember that publishing software has legal consequences. + +This guide complements the foundation-wide policies and guides: + +- [Release Policy](https://www.apache.org/legal/release-policy.html) +- [Release Distribution Policy](https://infra.apache.org/release-distribution) +- [Release Creation Process](https://infra.apache.org/release-publishing.html) + +## Some Terminology of release + +In the context of our release, we use several terms to describe different stages of the release process. + +Here's an explanation of these terms: + +- `iceberg_version`: the version of Iceberg to be released, like `0.2.0`. +- `release_version`: the version of release candidate, like `0.2.0-rc.1`. +- `rc_version`: the minor version for voting round, like `rc.1`. + +## Preparation + +
+ +This section is the requirements for individuals who are new to the role of release manager. + +
+ +Refer to [Setup GPG Key](reference/setup_gpg.md) to make sure the GPG key has been set up. + +## Start a tracking issue about the next release + +Start a tracking issue on GitHub for the upcoming release to track all tasks that need to be completed. + +Title: + +``` +Tracking issues of Iceberg Rust ${iceberg_version} Release +``` + +Content: + +```markdown +This issue is used to track tasks of the iceberg rust ${iceberg_version} release. + +## Tasks + +### Blockers + +> Blockers are the tasks that must be completed before the release. + +### Build Release + +#### GitHub Side + +- [ ] Bump version in project +- [ ] Update docs +- [ ] Generate dependencies list +- [ ] Push release candidate tag to GitHub + +#### ASF Side + +- [ ] Create an ASF Release +- [ ] Upload artifacts to the SVN dist repo + +### Voting + +- [ ] Start VOTE at iceberg community + +### Official Release + +- [ ] Push the release git tag +- [ ] Publish artifacts to SVN RELEASE branch +- [ ] Change Iceberg Rust Website download link +- [ ] Send the announcement + +For details of each step, please refer to: https://rust.iceberg.apache.org/release +``` + +## GitHub Side + +### Bump version in project + +Bump all components' version in the project to the new iceberg version. +Please note that this version is the exact version of the release, not the release candidate version. + +- rust core: bump version in `Cargo.toml` + +### Update docs + +- Update `CHANGELOG.md`, refer to [Generate Release Note](reference/generate_release_note.md) for more information. + +### Generate dependencies list + +Download and setup `cargo-deny`. You can refer to [cargo-deny](https://embarkstudios.github.io/cargo-deny/cli/index.html). + +Running `python3 ./scripts/dependencies.py generate` to update the dependencies list of every package. + +### Push release candidate tag + +After bump version PR gets merged, we can create a GitHub release for the release candidate: + +- Create a tag at `main` branch on the `Bump Version` / `Patch up version` commit: `git tag -s "v0.2.0-rc.1"`, please correctly check out the corresponding commit instead of directly tagging on the main branch. +- Push tags to GitHub: `git push --tags`. + +## ASF Side + +If any step in the ASF Release process fails and requires code changes, +we will abandon that version and prepare for the next one. +Our release page will only display ASF releases instead of GitHub Releases. + +### Create an ASF Release + +After GitHub Release has been created, we can start to create ASF Release. + +- Checkout to released tag. (e.g. `git checkout v0.2.0-rc.1`, tag is created in the previous step) +- Use the release script to create a new release: `ICEBERG_VERSION= ICEBERG_VERSION_RC= ./scripts/release.sh`(e.g. `ICEBERG_VERSION=0.2.0 ICEBERG_VERSION_RC=rc.1 ./scripts/release.sh`) + - This script will do the following things: + - Create a new branch named by `release-${release_version}` from the tag + - Generate the release candidate artifacts under `dist`, including: + - `apache-iceberg-rust-${release_version}-src.tar.gz` + - `apache-iceberg-rust-${release_version}-src.tar.gz.asc` + - `apache-iceberg-rust-${release_version}-src.tar.gz.sha512` + - Check the header of the source code. This step needs docker to run. +- Push the newly created branch to GitHub + +This script will create a new release under `dist`. + +For example: + +```shell +> tree dist +dist +├── apache-iceberg-rust-0.2.0-src.tar.gz +├── apache-iceberg-rust-0.2.0-src.tar.gz.asc +└── apache-iceberg-rust-0.2.0-src.tar.gz.sha512 +``` + +### Upload artifacts to the SVN dist repo + +SVN is required for this step. + +The svn repository of the dev branch is: + +First, checkout Iceberg to local directory: + +```shell +# As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it. +svn co https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust iceberg-dist-dev +``` + +Then, upload the artifacts: + +> The `${release_version}` here should be like `0.2.0-rc.1` + +```shell +cd iceberg-dist-dev +# create a directory named by version +mkdir ${release_version} +# copy source code and signature package to the versioned directory +cp ${repo_dir}/dist/* ${release_version}/ +# check svn status +svn status +# add to svn +svn add ${release_version} +# check svn status +svn status +# commit to SVN remote server +svn commit -m "Prepare for ${release_version}" +``` + +Visit to make sure the artifacts are uploaded correctly. + +### Rescue + +If you accidentally published wrong or unexpected artifacts, like wrong signature files, wrong sha256 files, +please cancel the release for the current `release_version`, +_increase th RC counting_ and re-initiate a release with the new `release_version`. +And remember to delete the wrong artifacts from the SVN dist repo. + +## Voting + +Iceberg Community Vote should send email to: : + +Title: + +``` +[VOTE] Release Apache Iceberg Rust ${release_version} - Round 1 +``` + +Content: + +``` +Hello, Apache Iceberg Rust Community, + +This is a call for a vote to release Apache Iceberg rust version ${iceberg_version}. + +The tag to be voted on is ${iceberg_version}. + +The release candidate: + +https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/${release_version}/ + +Keys to verify the release candidate: + +https://downloads.apache.org/iceberg/KEYS + +Git tag for the release: + +https://github.com/apache/iceberg-rust/releases/tag/${release_version} + +Please download, verify, and test. + +The VOTE will be open for at least 72 hours and until the necessary +number of votes are reached. + +[ ] +1 approve +[ ] +0 no opinion +[ ] -1 disapprove with the reason + +To learn more about apache iceberg, please see https://rust.iceberg.apache.org/ + +Checklist for reference: + +[ ] Download links are valid. +[ ] Checksums and signatures. +[ ] LICENSE/NOTICE files exist +[ ] No unexpected binary files +[ ] All source files have ASF headers +[ ] Can compile from source + +More detailed checklist please refer to: +https://github.com/apache/iceberg-rust/tree/main/scripts + +To compile from source, please refer to: +https://github.com/apache/iceberg-rust/blob/main/CONTRIBUTING.md + +Here is a Python script in release to help you verify the release candidate: + +./scripts/verify.py + +Thanks + +${name} +``` + +Example: + +After at least 3 `+1` binding vote (from Iceberg PMC member), claim the vote result: + +Title: + +``` +[RESULT][VOTE] Release Apache Iceberg Rust ${release_version} - Round 1 +``` + +Content: + +``` +Hello, Apache Iceberg Rust Community, + +The vote to release Apache Iceberg Rust ${release_version} has passed. + +The vote PASSED with 3 +1 binding and 1 +1 non-binding votes, no +0 or -1 votes: + +Binding votes: + +- xxx +- yyy +- zzz + +Non-Binding votes: + +- aaa + +Vote thread: ${vote_thread_url} + +Thanks + +${name} +``` + +Example: + +## Official Release + +### Push the release git tag + +```shell +# Checkout the tags that passed VOTE +git checkout ${release_version} +# Tag with the iceberg version +git tag -s ${iceberg_version} +# Push tags to github to trigger releases +git push origin ${iceberg_version} +``` + +### Publish artifacts to SVN RELEASE branch + +```shell +svn mv https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/${release_version} https://dist.apache.org/repos/dist/release/iceberg/iceberg-rust/${iceberg_version} -m "Release ${iceberg_version}" +``` + +### Change Iceberg Rust Website download link + +Update the download link in `website/src/download.md` to the new release version. + +### Create a GitHub Release + +- Click [here](https://github.com/apache/iceberg-rust/releases/new) to create a new release. +- Pick the git tag of this release version from the dropdown menu. +- Make sure the branch target is `main`. +- Generate the release note by clicking the `Generate release notes` button. +- Add the release note from every component's `upgrade.md` if there are breaking changes before the content generated by GitHub. Check them carefully. +- Publish the release. + +### Send the announcement + +Send the release announcement to `dev@iceberg.apache.org` and CC `announce@apache.org`. + +Instead of adding breaking changes, let's include the new features as "notable changes" in the announcement. + +Title: + +``` +[ANNOUNCE] Release Apache Iceberg Rust ${iceberg_version} +``` + +Content: + +``` +Hi all, + +The Apache Iceberg rust community is pleased to announce +that Apache Iceberg rust ${iceberg_version} has been released! + +Iceberg is a data access layer that allows users to easily and efficiently +retrieve data from various storage services in a unified way. + +The notable changes since ${iceberg_version} include: +1. xxxxx +2. yyyyyy +3. zzzzzz + +Please refer to the change log for the complete list of changes: +https://github.com/apache/iceberg-rust/releases/tag/v${iceberg_version} + +Apache Iceberg Rust website: https://rust.iceberg.apache.org/ + +Download Links: https://rust.iceberg.apache.org/download + +Iceberg Resources: +- Issue: https://github.com/apache/iceberg-rust/issues +- Mailing list: dev@iceberg.apache.org + +Thanks +On behalf of Apache Iceberg Community +``` + +Example: From 8e9d5f3a3c0437d072471291ca4f9ea20a8331d2 Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Tue, 23 Jan 2024 12:42:33 +0800 Subject: [PATCH 2/4] Fix typo Signed-off-by: Xuanwo --- website/src/reference/setup_gpg.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/reference/setup_gpg.md b/website/src/reference/setup_gpg.md index 0cf58317c..562113d0e 100644 --- a/website/src/reference/setup_gpg.md +++ b/website/src/reference/setup_gpg.md @@ -142,14 +142,14 @@ Uploading keys to the keyserver is mainly for joining a [Web of Trust](https://i ::: -The svn repository of the release branch is: https://dist.apache.org/repos/dist/release/incubator/opendal +The svn repository of the release branch is: https://dist.apache.org/repos/dist/release/iceberg Please always add the public key to KEYS in the release branch: ```shell -svn co https://dist.apache.org/repos/dist/release/incubator/opendal opendal-dist +svn co https://dist.apache.org/repos/dist/release/iceberg iceberg-dist # As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it. -cd opendal-dist +cd iceberg-dist (gpg --list-sigs YOUR_NAME@apache.org && gpg --export --armor YOUR_NAME@apache.org) >> KEYS # Append your key to the KEYS file svn add . # It is not needed if the KEYS document exists before. svn ci -m "add gpg key for YOUR_NAME" # Later on, if you are asked to enter a username and password, just use your apache username and password. From 2bb0433fda0d29aacd9d3778fe2e1db275f5c4e8 Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Tue, 23 Jan 2024 12:43:44 +0800 Subject: [PATCH 3/4] Apply suggestions from code review Co-authored-by: Fokko Driesprong --- website/src/release.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/src/release.md b/website/src/release.md index b56301720..18b108851 100644 --- a/website/src/release.md +++ b/website/src/release.md @@ -208,7 +208,7 @@ Iceberg Community Vote should send email to: : Title: ``` -[VOTE] Release Apache Iceberg Rust ${release_version} - Round 1 +[VOTE] Release Apache Iceberg Rust ${release_version} RC1 ``` Content: @@ -241,7 +241,7 @@ number of votes are reached. [ ] +0 no opinion [ ] -1 disapprove with the reason -To learn more about apache iceberg, please see https://rust.iceberg.apache.org/ +To learn more about Apache Iceberg, please see https://rust.iceberg.apache.org/ Checklist for reference: @@ -274,7 +274,7 @@ After at least 3 `+1` binding vote (from Iceberg PMC member), claim the vote res Title: ``` -[RESULT][VOTE] Release Apache Iceberg Rust ${release_version} - Round 1 +[RESULT][VOTE] Release Apache Iceberg Rust ${release_version} RC1 ``` Content: @@ -354,8 +354,8 @@ Content: ``` Hi all, -The Apache Iceberg rust community is pleased to announce -that Apache Iceberg rust ${iceberg_version} has been released! +The Apache Iceberg Rust community is pleased to announce +that Apache Iceberg Rust ${iceberg_version} has been released! Iceberg is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. From ce830e2be535d11d811f8ba2337e23ee13f2b911 Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Tue, 23 Jan 2024 12:48:15 +0800 Subject: [PATCH 4/4] Add verify Signed-off-by: Xuanwo --- scripts/verify.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 scripts/verify.py diff --git a/scripts/verify.py b/scripts/verify.py new file mode 100644 index 000000000..415bb243a --- /dev/null +++ b/scripts/verify.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +# 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. + + +import subprocess +import sys +import os + +BASE_DIR = os.getcwd() + + +def check_rust(): + try: + subprocess.run(["cargo", "--version"], check=True) + return True + except FileNotFoundError: + return False + except Exception as e: + raise Exception("Check rust met unexpected error", e) + +def build_core(): + print("Start building iceberg rust") + + subprocess.run(["cargo", "build", "--release"], check=True) + +def main(): + if not check_rust(): + print( + "Cargo is not found, please check if rust development has been setup correctly" + ) + print("Visit https://www.rust-lang.org/tools/install for more information") + sys.exit(1) + + build_core() + +if __name__ == "__main__": + main() \ No newline at end of file