mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-27 20:42:10 +00:00
Add a ruff docker image at ghcr.io/astral-sh/ruff (#8554)
This dockerfile creates a minimal docker container that runs ruff
```console
$ docker run -v .:/io --rm ruff check --select G004 .
scripts/check_ecosystem.py:51:26: G004 Logging statement uses f-string
scripts/check_ecosystem.py:55:22: G004 Logging statement uses f-string
scripts/check_ecosystem.py:84:13: G004 Logging statement uses f-string
scripts/check_ecosystem.py:177:18: G004 Logging statement uses f-string
scripts/check_ecosystem.py:200:18: G004 Logging statement uses f-string
scripts/check_ecosystem.py:354:18: G004 Logging statement uses f-string
scripts/check_ecosystem.py:477:18: G004 Logging statement uses f-string
Found 7 errors.
```
```console
$ docker image ls ruff
REPOSITORY TAG IMAGE ID CREATED SIZE
ruff latest 505876b0f817 2 minutes ago 16.2MB
```
Test repo: https://github.com/konstin/release-testing2
Successful build:
1865915510
The package:
https://github.com/konstin/release-testing2/pkgs/container/release-testing2
After merging this, i have to manually push the first image and connect
it the repo in the github UI or the action will fail due to lack of
permissions
Open questions:
* Test arm version: Anyone working on an aarch64 linux machine? I don't
see this failing or a high-priority deployment (the vast majority of
linux users is on x86), but it would be nice to have it tested one.
---------
Co-authored-by: Zanie Blue <contact@zanie.dev>
This commit is contained in:
parent
f460f9c5c0
commit
a7fc785cc5
3 changed files with 99 additions and 0 deletions
56
.github/workflows/release.yaml
vendored
56
.github/workflows/release.yaml
vendored
|
@ -516,6 +516,62 @@ jobs:
|
||||||
files: binaries/*
|
files: binaries/*
|
||||||
tag_name: v${{ inputs.tag }}
|
tag_name: v${{ inputs.tag }}
|
||||||
|
|
||||||
|
docker-publish:
|
||||||
|
# This action doesn't need to wait on any other task, it's easy to re-tag if something failed and we're validating
|
||||||
|
# the tag here also
|
||||||
|
name: Push Docker image ghcr.io/astral-sh/ruff
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: release
|
||||||
|
permissions:
|
||||||
|
# For the docker push
|
||||||
|
packages: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ inputs.sha }}
|
||||||
|
|
||||||
|
- uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: ghcr.io/astral-sh/ruff
|
||||||
|
|
||||||
|
- name: Check tag consistency
|
||||||
|
# Unlike validate-tag we don't check if the commit is on the main branch, but it seems good enough since we can
|
||||||
|
# change docker tags
|
||||||
|
if: ${{ inputs.tag }}
|
||||||
|
run: |
|
||||||
|
version=$(grep "version = " pyproject.toml | sed -e 's/version = "\(.*\)"/\1/g')
|
||||||
|
if [ "${{ inputs.tag }}" != "${version}" ]; then
|
||||||
|
echo "The input tag does not match the version from pyproject.toml:" >&2
|
||||||
|
echo "${{ inputs.tag }}" >&2
|
||||||
|
echo "${version}" >&2
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Releasing ${version}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: "Build and push Docker image"
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
# Reuse the builder
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
push: ${{ inputs.tag != '' }}
|
||||||
|
tags: ghcr.io/astral-sh/ruff:latest,ghcr.io/astral-sh/ruff:${{ inputs.tag || 'dry-run' }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
|
||||||
# After the release has been published, we update downstream repositories
|
# After the release has been published, we update downstream repositories
|
||||||
# This is separate because if this fails the release is still fine, we just need to do some manual workflow triggers
|
# This is separate because if this fails the release is still fine, we just need to do some manual workflow triggers
|
||||||
update-dependents:
|
update-dependents:
|
||||||
|
|
35
Dockerfile
Normal file
35
Dockerfile
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
FROM --platform=$BUILDPLATFORM ubuntu as build
|
||||||
|
ENV HOME="/root"
|
||||||
|
WORKDIR $HOME
|
||||||
|
|
||||||
|
RUN apt update && apt install -y build-essential curl python3-venv
|
||||||
|
|
||||||
|
# Setup zig as cross compiling linker
|
||||||
|
RUN python3 -m venv $HOME/.venv
|
||||||
|
RUN .venv/bin/pip install cargo-zigbuild
|
||||||
|
ENV PATH="$HOME/.venv/bin:$PATH"
|
||||||
|
|
||||||
|
# Install rust
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
RUN case "$TARGETPLATFORM" in \
|
||||||
|
"linux/arm64") echo "aarch64-unknown-linux-musl" > rust_target.txt ;; \
|
||||||
|
"linux/amd64") echo "x86_64-unknown-linux-musl" > rust_target.txt ;; \
|
||||||
|
*) exit 1 ;; \
|
||||||
|
esac
|
||||||
|
# TODO: --default-toolchain none and use rust-toolchain.toml instead
|
||||||
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --target $(cat rust_target.txt) --profile minimal
|
||||||
|
ENV PATH="$HOME/.cargo/bin:$PATH"
|
||||||
|
|
||||||
|
# Build
|
||||||
|
COPY crates crates
|
||||||
|
COPY Cargo.toml Cargo.toml
|
||||||
|
COPY Cargo.lock Cargo.lock
|
||||||
|
RUN cargo zigbuild --bin ruff --target $(cat rust_target.txt) --release
|
||||||
|
RUN cp target/$(cat rust_target.txt)/release/ruff /ruff
|
||||||
|
# TODO: Optimize binary size, with a version that also works when cross compiling
|
||||||
|
# RUN strip --strip-all /ruff
|
||||||
|
|
||||||
|
FROM scratch
|
||||||
|
COPY --from=build /ruff /ruff
|
||||||
|
WORKDIR /io
|
||||||
|
ENTRYPOINT ["/ruff"]
|
|
@ -41,4 +41,12 @@ on the testing repositories:
|
||||||
apk add ruff
|
apk add ruff
|
||||||
```
|
```
|
||||||
|
|
||||||
|
On **Docker**, it is published as `ghcr.io/astral-sh/ruff`, tagged for each release and `latest` for
|
||||||
|
the latest release.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -v .:/io --rm ghcr.io/astral-sh/ruff check .
|
||||||
|
docker run -v .:/io --rm ghcr.io/astral-sh/ruff:0.1.3 check .
|
||||||
|
```
|
||||||
|
|
||||||
[](https://repology.org/project/ruff-python-linter/versions)
|
[](https://repology.org/project/ruff-python-linter/versions)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue