mirror of
https://github.com/sadoyan/aralez.git
synced 2026-10-22 21:51:35 +08:00
feat: github actions
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
.git/
|
||||
.github/
|
||||
.gitignore
|
||||
.dockerignore
|
||||
/charts/
|
||||
#
|
||||
docker-compose.yml
|
||||
#
|
||||
/.cargo/
|
||||
@@ -0,0 +1,50 @@
|
||||
name: Build check
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "src/**"
|
||||
- "Dockerfile"
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build and Test
|
||||
timeout-minutes: 15
|
||||
runs-on: ubuntu-24.04
|
||||
if: github.event.pull_request.draft == false
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # v1
|
||||
with:
|
||||
toolchain: "1.98"
|
||||
components: clippy, rustfmt
|
||||
- name: Install cargo-deny
|
||||
uses: taiki-e/install-action@3f74d7c16a4242f1c95561e98edc25d36adb4375 # v2.87.12
|
||||
with:
|
||||
tool: cargo-deny
|
||||
- name: Rust cache
|
||||
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
|
||||
- name: Rust build
|
||||
run: make build test
|
||||
|
||||
- name: Rust fmt
|
||||
run: make fmt
|
||||
- name: Rust linter
|
||||
run: make lint
|
||||
- name: Rust dependencies check
|
||||
run: make deps
|
||||
@@ -0,0 +1,58 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
# push:
|
||||
# tags:
|
||||
# - "v*"
|
||||
|
||||
jobs:
|
||||
goreleaser:
|
||||
name: GoReleaser
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # v1
|
||||
with:
|
||||
toolchain: "1.98"
|
||||
components: clippy, rustfmt
|
||||
- name: Rust cache
|
||||
uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
|
||||
- name: Install Cosign
|
||||
uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
|
||||
with:
|
||||
platforms: arm64
|
||||
- name: Set up docker buildx
|
||||
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4.3.0
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
with:
|
||||
node-version: 24
|
||||
|
||||
- name: Github registry login
|
||||
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Run GoReleaser
|
||||
uses: goreleaser/goreleaser-action@f06c13b6b1a9625abc9e6e439d9c05a8f2190e94 # v7.2.3
|
||||
with:
|
||||
version: "v2.18.1"
|
||||
args: release --clean
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,92 @@
|
||||
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
|
||||
version: 2
|
||||
project_name: aralez
|
||||
|
||||
dist: target
|
||||
builds:
|
||||
- id: aralez
|
||||
builder: rust
|
||||
flags:
|
||||
- --release
|
||||
targets:
|
||||
- x86_64-unknown-linux-gnu
|
||||
- aarch64-unknown-linux-gnu
|
||||
env:
|
||||
- RUSTFLAGS={{ if eq .Arch "amd64" }}-C target-cpu=x86-64-v3 -C target-feature=+aes,+ssse3{{else}}-C target-cpu=neoverse-n1 -C target-feature=+aes,+sha2,+neon,+crc{{ end }}
|
||||
|
||||
- id: aralez-musl
|
||||
builder: rust
|
||||
flags:
|
||||
- --release
|
||||
targets:
|
||||
- x86_64-unknown-linux-musl
|
||||
- aarch64-unknown-linux-musl
|
||||
env:
|
||||
- RUSTFLAGS={{ if eq .Arch "amd64" }}-C target-cpu=x86-64-v3 -C target-feature=+aes,+ssse3{{else}}-C target-cpu=neoverse-n1 -C target-feature=+aes,+sha2,+neon,+crc{{ end }}
|
||||
|
||||
snapshot:
|
||||
version_template: edge
|
||||
|
||||
archives:
|
||||
- id: aralez
|
||||
ids:
|
||||
- aralez
|
||||
formats: [binary]
|
||||
name_template: "{{ .ProjectName }}_{{ .Arch }}-glibc"
|
||||
|
||||
- id: aralez-musl
|
||||
ids:
|
||||
- aralez-musl
|
||||
formats: [binary]
|
||||
name_template: "{{ .ProjectName }}_{{ .Arch }}-musl"
|
||||
|
||||
dockers_v2:
|
||||
- id: aralez
|
||||
ids:
|
||||
- aralez
|
||||
flags:
|
||||
- --target=release
|
||||
images:
|
||||
- "ghcr.io/sadoyan/{{ .ProjectName }}"
|
||||
# - "sadoyan/{{ .ProjectName }}"
|
||||
tags:
|
||||
- "{{ if not .IsSnapshot }}v{{.Version}}{{ else }}edge{{ end }}"
|
||||
platforms:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
annotations:
|
||||
org.opencontainers.image.name: "{{ .ProjectName }}"
|
||||
org.opencontainers.image.licenses: "Apache-2.0"
|
||||
org.opencontainers.image.source: "https://github.com/sadoyan/{{ .ProjectName }}"
|
||||
org.opencontainers.image.url: "{{ .GitURL }}"
|
||||
org.opencontainers.image.created: "{{ .Date }}"
|
||||
org.opencontainers.image.version: "{{ .Version }}"
|
||||
org.opencontainers.image.revision: "{{ .FullCommit }}"
|
||||
io.artifacthub.package.readme-url: "https://raw.githubusercontent.com/sadoyan/{{ .ProjectName }}/main/README.md"
|
||||
io.artifacthub.package.license: "Apache-2.0"
|
||||
|
||||
docker_signs:
|
||||
- id: docker
|
||||
ids:
|
||||
- aralez
|
||||
cmd: cosign
|
||||
args:
|
||||
- sign
|
||||
- "--yes"
|
||||
- "${artifact}"
|
||||
output: true
|
||||
|
||||
checksum:
|
||||
name_template: checksums.txt
|
||||
algorithm: sha256
|
||||
|
||||
signs:
|
||||
- artifacts: checksum
|
||||
signature: "${artifact}.sigstore.json"
|
||||
cmd: cosign
|
||||
args:
|
||||
- sign-blob
|
||||
- "--yes"
|
||||
- "--bundle=${signature}"
|
||||
- "${artifact}"
|
||||
output: true
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
# syntax = docker/dockerfile:1.22
|
||||
########################################
|
||||
|
||||
FROM rust:1.98-trixie AS builder
|
||||
ARG TARGETARCH
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y build-essential make cmake pkg-config libssl-dev musl-dev musl-tools
|
||||
|
||||
RUN case "${TARGETARCH}" in \
|
||||
amd64) \
|
||||
apt-get install -y --no-install-recommends gcc-x86-64-linux-gnu && \
|
||||
rustup target add x86_64-unknown-linux-gnu; \
|
||||
rustup target add x86_64-unknown-linux-musl; \
|
||||
;; \
|
||||
arm64) \
|
||||
apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu && \
|
||||
rustup target add aarch64-unknown-linux-gnu; \
|
||||
rustup target add aarch64-unknown-linux-musl; \
|
||||
;; \
|
||||
*) echo "Unsupported architecture: ${TARGETARCH}" >&2; exit 1 ;; \
|
||||
esac
|
||||
RUN rustup component add rustfmt clippy && \
|
||||
cargo install cargo-deny
|
||||
|
||||
RUN ARCH=$(case "${TARGETARCH}" in \
|
||||
amd64) echo "x86_64" ;; \
|
||||
arm64) echo "aarch64" ;; \
|
||||
*) echo "${TARGETARCH}" ;; \
|
||||
esac) && curl -LO https://ziglang.org/download/0.16.0/zig-${ARCH}-linux-0.16.0.tar.xz \
|
||||
&& tar -xf zig-${ARCH}-linux-0.16.0.tar.xz -C /opt \
|
||||
&& ln -s /opt/zig-${ARCH}-linux-0.16.0/zig /usr/local/bin/zig
|
||||
|
||||
RUN echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list && \
|
||||
apt-get update && apt-get install -y goreleaser
|
||||
|
||||
RUN cargo install cargo-binstall --locked && \
|
||||
cargo binstall cargo-zigbuild --no-confirm
|
||||
|
||||
COPY [".", "/src"]
|
||||
|
||||
########################################
|
||||
|
||||
FROM --platform=${TARGETARCH} gcr.io/distroless/cc-debian13:nonroot AS release
|
||||
|
||||
ARG TARGETPLATFORM
|
||||
COPY ${TARGETPLATFORM}/aralez /usr/local/bin/aralez
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/aralez"]
|
||||
@@ -0,0 +1,62 @@
|
||||
########################################################
|
||||
|
||||
TARGET ?= --all-targets
|
||||
FEATURES ?= --all-features
|
||||
|
||||
########################################################
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
|
||||
########################################################
|
||||
|
||||
.PHONY: all
|
||||
all: build test fmt checkup ## Build and test project
|
||||
|
||||
.PHONY: build
|
||||
build: ## Build project
|
||||
cargo build --workspace $(TARGET) $(FEATURES)
|
||||
|
||||
.PHONY: test
|
||||
test: ## Run tests
|
||||
cargo test --workspace $(TARGET) $(FEATURES)
|
||||
|
||||
.PHONY: fmt
|
||||
fmt: ## Check code formatting
|
||||
cargo fmt --all -- --check
|
||||
|
||||
.PHONY: lint
|
||||
lint: ## Run linter
|
||||
cargo clippy --workspace $(TARGET) $(FEATURES) -- -D warnings
|
||||
|
||||
.PHONY: checkup
|
||||
checkup: lint ## Run linter and check project
|
||||
cargo check --workspace $(TARGET) $(FEATURES)
|
||||
|
||||
.PHONY: deps
|
||||
deps: ## Check project dependencies for advisories
|
||||
cargo deny check advisories
|
||||
|
||||
########################################################
|
||||
|
||||
.PHONY: update
|
||||
update:
|
||||
cargo update --verbose
|
||||
|
||||
.PHONY: features
|
||||
features:
|
||||
cargo features
|
||||
|
||||
########################################################
|
||||
|
||||
.PHONY: fix
|
||||
fix:
|
||||
cargo fix
|
||||
|
||||
.PHONY: fix-all
|
||||
fix-all:
|
||||
cargo fix --all
|
||||
cargo clippy --workspace $(TARGET) $(FEATURES) --fix
|
||||
|
||||
########################################################
|
||||
Reference in New Issue
Block a user