diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..726d6f245 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,17 @@ +{ + "name": "Iceberg Rust", + "image": "mcr.microsoft.com/devcontainers/rust:bullseye", + "customizations": { + "vscode": { + "extensions": [ + "rust-lang.rust-analyzer" + ], + "settings": { + "editor.formatOnSave": true, + "files.exclude": { + "**/LICENSE": true + } + } + } + } +} diff --git a/.github/workflows/ci_typos.yml b/.github/workflows/ci_typos.yml new file mode 100644 index 000000000..691f2c9ec --- /dev/null +++ b/.github/workflows/ci_typos.yml @@ -0,0 +1,47 @@ +# 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: Typos Check + +on: + push: + branches: + - main + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + +env: + RUST_BACKTRACE: 1 + +jobs: + typos-check: + name: typos check + runs-on: ubuntu-latest + timeout-minutes: 10 + env: + FORCE_COLOR: 1 + steps: + - uses: actions/checkout@v3 + - run: curl -LsSf https://github.com/crate-ci/typos/releases/download/v1.14.8/typos-v1.14.8-x86_64-unknown-linux-musl.tar.gz | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin + + - name: do typos check with typos-cli + run: typos diff --git a/.licenserc.yaml b/.licenserc.yaml index 21234c843..cd362bc94 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -23,6 +23,6 @@ header: paths-ignore: - 'LICENSE' - 'NOTICE' - - '**/*.md' + - '**/*.json' comment: on-failure diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..3d1a50b33 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,27 @@ + + +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/) +and this project adheres to [Semantic Versioning](https://semver.org/). + +## Unreleased diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..76566df58 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,113 @@ + + +# Contributing + +First, thank you for contributing to Iceberg Rust! The goal of this document is to provide everything you need to start contributing to iceberg-rust. The following TOC is sorted progressively, starting with the basics and expanding into more specifics. + +- [Your First Contribution](#your-first-contribution) +- [Workflow](#workflow) + - [Git Branches](#git-branches) + - [GitHub Pull Requests](#github-pull-requests) + - [Title](#title) + - [Reviews & Approvals](#reviews--approvals) + - [Merge Style](#merge-style) + - [CI](#ci) +- [Setup](#setup) + - [Using a dev container environment](#using-a-dev-container-environment) + - [Bring your own toolbox](#bring-your-own-toolbox) +- [Code of Conduct](#code-of-conduct) + +## Your First Contribution + +1. [Fork the iceberg-rust repository](https://github.com/apache/iceberg-rust/fork) into your own GitHub account. +1. [Create a new Git branch](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-and-deleting-branches-within-your-repository). +1. Make your changes. +1. [Submit the branch as a pull request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork) to the main iceberg-rust repo. An iceberg-rust team member should comment and/or review your pull request within a few days. Although, depending on the circumstances, it may take longer. + +## Workflow + +### Git Branches + +*All* changes must be made in a branch and submitted as [pull requests](#github-pull-requests). iceberg-rust does not adopt any type of branch naming style, but please use something descriptive of your changes. + +### GitHub Pull Requests + +Once your changes are ready you must submit your branch as a [pull request](https://github.com/apache/iceberg-rust/pulls). + +#### Title + +The pull request title must follow the format outlined in the [conventional commits spec](https://www.conventionalcommits.org). [Conventional commits](https://www.conventionalcommits.org) is a standardized format for commit messages. iceberg-rust only requires this format for commits on the `main` branch. And because iceberg-rust squashes commits before merging branches, this means that only the pull request title must conform to this format. + +The following are all good examples of pull request titles: + +```text +feat(schema): Add last_updated_ms in schema +docs: add hdfs classpath related troubleshoot +ci: Mark job as skipped if owner is not apache +fix(schema): Ignore prefix if it's empty +refactor: Polish the implementation of read parquet +``` + +#### Reviews & Approvals + +All pull requests should be reviewed by at least one iceberg-rust committer. + +#### Merge Style + +All pull requests are squash merged. We generally discourage large pull requests that are over 300-500 lines of diff. If you would like to propose a change that is larger we suggest coming onto [Iceberg's DEV mailing list](mailto:dev@iceberg.apache.org) or [Slack #rust Channel](https://join.slack.com/t/apache-iceberg/shared_invite/zt-1zbov3k6e-KtJfoaxp97YfX6dPz1Bk7A) and discuss it with us. This way we can talk through the solution and discuss if a change that large is even needed! This will produce a quicker response to the change and likely produce code that aligns better with our process. + +### CI + +Currently, iceberg-rust uses GitHub Actions to run tests. The workflows are defined in `.github/workflows`. + +## Setup + +For small or first-time contributions, we recommend the dev container method. Prefer to do it yourself? That's fine too! + +### Using a dev container environment + +iceberg-rust provides a pre-configured [dev container](https://containers.dev/) that could be used in [Github Codespaces](https://github.com/features/codespaces), [VSCode](https://code.visualstudio.com/), [JetBrains](https://www.jetbrains.com/remote-development/gateway/), [JuptyerLab](https://jupyterlab.readthedocs.io/en/stable/). Please pick up your favourite runtime environment. + +The fastest way is: + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/apache/iceberg-rust?quickstart=1&machine=standardLinux32gb) + +### Bring your own toolbox + +iceberg-rust is primarily a Rust project. To build iceberg-rust, you will need to set up Rust development first. We highly recommend using [rustup](https://rustup.rs/) for the setup process. + +For Linux or MacOS, use the following command: + +```shell +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +For Windows, download `rustup-init.exe` from [here](https://win.rustup.rs/x86_64) instead. + +Rustup will read iceberg-rust's `rust-toolchain.toml` and set up everything else automatically. To ensure that everything works correctly, run `cargo version` under iceberg-rust's root directory: + +```shell +$ cargo version +cargo 1.69.0 (6e9a83356 2023-04-12) +``` + +## Code of Conduct + +We expect all community members to follow our [Code of Conduct](https://www.apache.org/foundation/policies/conduct.html). diff --git a/NOTICE b/NOTICE new file mode 100644 index 000000000..c2746f155 --- /dev/null +++ b/NOTICE @@ -0,0 +1,5 @@ +Apache Iceberg Rust +Copyright 2023 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/README.md b/README.md index 554c0ca1e..d7caa34bc 100644 --- a/README.md +++ b/README.md @@ -1 +1,35 @@ -# Native Rust implementation of Apache Iceberg + + +# Apache Iceberg Rust + +Native Rust implementation of [Apache Iceberg](https://iceberg.apache.org/). + +## Contribute + +Iceberg is an active open-source project. We are always open to people who want to use it or contribute to it. Here are some ways to go. + +- Start with [Contributing Guide](CONTRIBUTING.md). +- Submit [Issues](https://github.com/apache/iceberg-rust/issues/new) for bug report or feature requests. +- Discuss at [dev mailing list](mailto:dev@iceberg.apache.org) ([subscribe](mailto:dev-subscribe@iceberg.apache.org?subject=(send%20this%20email%20to%20subscribe)) / [unsubscribe](mailto:dev-unsubscribe@iceberg.apache.org?subject=(send%20this%20email%20to%20unsubscribe)) / [archives](https://lists.apache.org/list.html?dev@iceberg.apache.org)) +- Talk to community directly at [Slack #rust channel](https://join.slack.com/t/apache-iceberg/shared_invite/zt-1zbov3k6e-KtJfoaxp97YfX6dPz1Bk7A). + +## License + +Licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 000000000..39be343c6 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,19 @@ +# 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. + +edition = "2021" +reorder_imports = true