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

[WIP] Continuous integration using Github Actions #4

Merged
merged 12 commits into from
May 3, 2021
Merged
307 changes: 307 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,307 @@
name: Rust
on:
push:
branches:
- master
- develop # TODO: remove before merging to master
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
pull_request:

jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
components: rustfmt
default: true
override: true
- name: Cargo cache
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-rust_stable-${{ hashFiles('**/Cargo.toml') }}
- name: Format
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check

doc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
components: rust-docs
default: true
override: true
- name: Cargo cache
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-rust_nightly-${{ hashFiles('**/Cargo.toml') }}
- name: Documentation
uses: actions-rs/cargo@v1
env:
DOCS_RS: 1
with:
command: doc

check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- run: sudo apt-get install -y libdrm-dev
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
Drakulix marked this conversation as resolved.
Show resolved Hide resolved
profile: minimal
components: clippy
default: true
override: true
- name: Cargo cache
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-rust_nightly-${{ hashFiles('**/Cargo.toml') }}
- name: Build cache
uses: actions/cache@v2
with:
path: target
key: ${{ runner.os }}-build-rust_nightly-check-${{ hashFiles('**/Cargo.toml') }}
- name: Clippy check
uses: actions-rs/clippy-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
args: --all --all-features --all-targets -- -D warnings -A clippy::redundant_static_lifetimes

check-minimal:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- run: sudo apt-get install -y libdrm-dev
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
profile: minimal
default: true
override: true
- name: Cargo cache
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-rust_nightly-check-minimal-versions-${{ hashFiles('**/Cargo.toml') }}
- name: Build cache
uses: actions/cache@v2
with:
path: target
key: ${{ runner.os }}-build-rust_nightly-check-minimal-versions-${{ hashFiles('**/Cargo.toml') }}
- uses: actions-rs/cargo@v1
Drakulix marked this conversation as resolved.
Show resolved Hide resolved
with:
command: check
args: --all --all-features --all-targets -Z minimal-versions

test:
needs:
- format
- doc
- check
strategy:
fail-fast: ${{ startsWith(github.ref, 'refs/tags/') }}
matrix:
include:
# Generate bindings
- task: bindings
os: ubuntu-latest
rust: stable
target: i686-unknown-linux-gnu
- task: bindings
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-gnu
- task: bindings
os: ubuntu-latest
rust: stable
target: arm-unknown-linux-gnueabihf
- task: bindings
os: ubuntu-latest
rust: stable
target: armv7-unknown-linux-gnueabihf
- task: bindings
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-gnu
# Test channels
- task: channels
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-gnu
- task: channels
os: ubuntu-latest
rust: beta
target: x86_64-unknown-linux-gnu
- task: channels
os: ubuntu-latest
rust: nightly
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Setup linux toolchain
if: contains(matrix.target, '-linux-') && startsWith(matrix.target, 'x86_64-')
run: |
sudo apt-get update -y
sudo apt-get install -y libdrm-dev libgbm-dev
- name: Setup cross linux toolchain
if: contains(matrix.target, '-linux-') && !startsWith(matrix.target, 'x86_64-')
run: |
case "${{ matrix.target }}" in
i686-*) SYSTEM_ARCH=i386 ;;
arm*) SYSTEM_ARCH=armhf ;;
aarch64*) SYSTEM_ARCH=arm64 ;;
esac
GCC_TARGET=$(printf "${{ matrix.target }}" | sed 's/-unknown-/-/' | sed 's/arm[^-]*/arm/g')
ENV_TARGET=$(printf "${{ matrix.target }}" | tr '-' '_')
ENV_TARGET_UC=$(printf "${ENV_TARGET}" | tr '[[:lower:]]' '[[:upper:]]')
sudo rm -f /etc/apt/sources.list.d/*.list
case "${{ matrix.target }}" in
arm* | aarch64*)
sudo tee /etc/apt/sources.list << EOF
deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ focal main universe
deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ focal-updates main universe
deb [arch=i386,amd64] http://security.ubuntu.com/ubuntu/ focal-security main universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-security main universe
EOF
;;
esac
sudo dpkg --add-architecture ${SYSTEM_ARCH}
dpkg --print-foreign-architectures
sudo apt-get update -y
sudo apt-get upgrade -y --fix-broken
sudo apt-get install -y libdrm-dev:${SYSTEM_ARCH} libgbm-dev:${SYSTEM_ARCH} gcc-${GCC_TARGET} pkg-config-${GCC_TARGET}
echo "CARGO_TARGET_${ENV_TARGET_UC}_LINKER=${GCC_TARGET}-gcc" >> $GITHUB_ENV
echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV
echo "PKG_CONFIG_${ENV_TARGET}=${GCC_TARGET}-pkg-config" >> $GITHUB_ENV
echo "PKG_CONFIG=${GCC_TARGET}-pkg-config" >> $GITHUB_ENV
echo "BINDGEN_EXTRA_CLANG_ARGS=--sysroot=/usr/${GCC_TARGET}" >> $GITHUB_ENV
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
target: ${{ matrix.target }}
profile: minimal
components: rustfmt
default: true
override: true
- name: Cargo cache
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-rust_${{ matrix.rust }}-${{ hashFiles('**/Cargo.toml') }}
- name: Build cache
if: |
runner.os != 'macOS'
uses: actions/cache@v2
with:
path: target
key: ${{ runner.os }}-build-rust_${{ matrix.rust }}-target_${{ matrix.target }}-${{ hashFiles('**/Cargo.toml') }}
- name: Update deps
uses: actions-rs/cargo@v1
with:
command: update
- name: Build sys
uses: actions-rs/cargo@v1
env:
RUST_LOG: bindgen=warn,bindgen::ir=error,bindgen::codegen=error
with:
command: build
args: --manifest-path gbm-sys/Cargo.toml --target ${{ matrix.target }} --features update_bindings
- name: Upload bindings
if: matrix.task == 'bindings'
uses: actions/upload-artifact@v2
with:
name: bindings
path: |
gbm-sys/${{ env.GBM_SYS_BINDINGS_FILE }}
LICENSE
README.md
- name: Build
uses: actions-rs/cargo@v1
with:
command: build
args: --target ${{ matrix.target }}
- name: Test
if: contains(matrix.target, '-linux-') && (startsWith(matrix.target, 'x86_64-') || startsWith(matrix.target, 'i686-'))
uses: actions-rs/cargo@v1
timeout-minutes: 12
env:
RUST_BACKTRACE: full
with:
command: test
args: --all --target ${{ matrix.target }}

update-bindings:
if: ${{ github.event_name != 'pull_request' && !startsWith(github.ref, 'refs/tags/') }}
needs:
- test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Download bindings
uses: actions/download-artifact@v2
with:
name: bindings
- name: Create pull request
uses: peter-evans/create-pull-request@v3
with:
base: ${{ github.head_ref }}
commit-message: Updated bindings
branch: update-bindings
delete-branch: true
title: Update bindings
body: |
Bindings should be updated to be consistent with latest changes

publish:
if: github.repository == 'Smithay/gbm.rs' && startsWith(github.ref, 'refs/tags/v')
needs:
- format
- doc
- check
- check-minimal
- test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Publish crates
uses: katyo/publish-crates@v1
with:
registry-token: ${{ secrets.CRATES_TOKEN }}
args: --no-verify
#dry-run: true
9 changes: 0 additions & 9 deletions .rustfmt.toml

This file was deleted.

27 changes: 0 additions & 27 deletions .travis.yml

This file was deleted.

30 changes: 24 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,40 @@ version = "0.6.0"
keywords = ["wayland", "gbm", "drm", "bindings"]
categories = ["external-ffi-bindings"]
authors = ["Victor Brekenfeld <[email protected]>"]
exclude = [".travis.yml", ".rustfmt.toml"]
exclude = [".gitignore", ".travis.yml", ".rustfmt.toml", ".github"]

[dependencies]
gbm-sys = { version = "0.1", path = "./gbm-sys" }
libc = "0.2"
bitflags = "1.2"
wayland-server = { version = "0.28", optional = true }
drm = { version = "0.4.0-alpha1", git = "https://github.com/Drakulix/drm-rs", branch = "next", optional = true }
drm-fourcc = "2.0"

[dev-dependencies]
drm = { version = "0.4.0-alpha1", git = "https://github.com/Drakulix/drm-rs", branch = "next" }
[dependencies.gbm-sys]
version = "0.1"
path = "./gbm-sys"

[dependencies.drm]
#version = "0.4.0-alpha1"
git = "https://github.com/Smithay/drm-rs"
branch = "develop"
optional = true

[dependencies.wayland-server]
version = "0.28.5"
optional = true

[dev-dependencies.drm]
#version = "0.4.0-alpha1"
git = "https://github.com/Smithay/drm-rs"
branch = "develop"

[features]
default = ["import-wayland", "import-egl", "drm-support"]
import-wayland = ["wayland-server"]
import-egl = []
drm-support = ["drm"]
gen = ["gbm-sys/gen"]

[workspace]
members = [
"gbm-sys"
]
Loading