added ci
This commit is contained in:
1 parent
7f60661eef
commit
25fa51c76d
12 files changed
+350
-3
No files matched your search
@@ -0,0 +1,150 @@
|
||||
name: Test, build and publish
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
env:
|
||||
CARGO_INCREMENTAL: '0'
|
||||
CARGO_PROFILE_DEV_DEBUG: '0'
|
||||
CARGO_PROFILE_TEST_DEBUG: '0'
|
||||
RUST_BACKTRACE: '1'
|
||||
|
||||
jobs:
|
||||
verify:
|
||||
name: All tests and Linux binary
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 90
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install native test dependencies and make room for 10 GiB tests
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends build-essential pkg-config libssl-dev libicu-dev lua5.4 liblua5.4-dev lua-filesystem lua-expat lua-socket lua-sec openssl
|
||||
rust_version=$(python3 -c 'import tomllib; print(tomllib.load(open("rust-toolchain.toml", "rb"))["toolchain"]["channel"])')
|
||||
rustup toolchain install "$rust_version" --profile minimal --component rustfmt --component clippy
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.24.3'
|
||||
cache: false
|
||||
- name: Build exact native Prosody reference
|
||||
run: bash scripts/ci/prepare-reference.sh "$RUNNER_TEMP/reference"
|
||||
- name: Build genuine MinIO
|
||||
run: |
|
||||
bash scripts/ci/prepare-minio.sh "$RUNNER_TEMP/minio"
|
||||
go clean -cache -modcache
|
||||
df -h . "$RUNNER_TEMP"
|
||||
python3 -c 'import shutil; assert shutil.disk_usage(".").free >= 20 * 2**30, "Need 20 GiB free for actual upload tests"'
|
||||
- name: Run every test, native oracle, load and real 10 GiB uploads
|
||||
env:
|
||||
PROSODY_REFERENCE_SOURCE: ${{ runner.temp }}/reference/prosody-cafd74b9c5ea
|
||||
PROSODY_REFERENCE_LUA: lua5.4
|
||||
MINIO_BINARY: ${{ runner.temp }}/minio
|
||||
run: |
|
||||
mkdir -p ci-results
|
||||
set -o pipefail
|
||||
bash scripts/ci/verify-all.sh 2>&1 | tee ci-results/verify.log
|
||||
- name: Package tested binary
|
||||
run: |
|
||||
mkdir -p dist
|
||||
cp target/release/rust-xmpp dist/rust-xmpp
|
||||
chmod 0755 dist/rust-xmpp
|
||||
dist/rust-xmpp --version
|
||||
(cd dist && sha256sum rust-xmpp > SHA256SUMS)
|
||||
- name: Save binary
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: rust-xmpp-linux-amd64
|
||||
path: dist/
|
||||
if-no-files-found: error
|
||||
retention-days: 30
|
||||
- name: Save test reports even on failure
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-results
|
||||
path: |
|
||||
ci-results/
|
||||
/tmp/muc-sm-load.json
|
||||
if-no-files-found: warn
|
||||
retention-days: 14
|
||||
|
||||
image:
|
||||
name: Container smoke test and Gitea publish
|
||||
needs: verify
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 20
|
||||
# Only the publication job needs registry credentials. PRs still build and test images.
|
||||
env:
|
||||
GITEA_REGISTRY: ${{ vars.GITEA_REGISTRY }}
|
||||
GITEA_IMAGE: ${{ vars.GITEA_IMAGE }}
|
||||
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
||||
PUBLISH: ${{ github.event_name != 'pull_request' && (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) || startsWith(github.ref, 'refs/tags/v')) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: rust-xmpp-linux-amd64
|
||||
path: dist
|
||||
- name: Verify downloaded executable
|
||||
run: |
|
||||
(cd dist && sha256sum --check SHA256SUMS)
|
||||
chmod 0755 dist/rust-xmpp
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- name: Build exact tested binary into runtime image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
target: ci-runtime
|
||||
platforms: linux/amd64
|
||||
load: true
|
||||
push: false
|
||||
tags: rust-xmpp:ci
|
||||
- name: Smoke-test runtime image
|
||||
run: |
|
||||
docker run --rm rust-xmpp:ci --version
|
||||
docker run --rm --entrypoint /usr/local/bin/prosodyctl rust-xmpp:ci --version
|
||||
id=$(docker create rust-xmpp:ci)
|
||||
trap 'docker rm "$id" >/dev/null' EXIT
|
||||
docker cp "$id:/usr/local/bin/rust-xmpp" /tmp/container-rust-xmpp
|
||||
cmp dist/rust-xmpp /tmp/container-rust-xmpp
|
||||
- name: Validate publication configuration
|
||||
if: env.PUBLISH == 'true'
|
||||
env:
|
||||
REGISTRY_USER: ${{ secrets.GITEA_REGISTRY_USERNAME }}
|
||||
REGISTRY_TOKEN: ${{ secrets.GITEA_REGISTRY_TOKEN }}
|
||||
run: python3 scripts/ci/image-tags.py
|
||||
id: image
|
||||
- name: Login to private Gitea registry
|
||||
if: env.PUBLISH == 'true'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ vars.GITEA_REGISTRY }}
|
||||
username: ${{ secrets.GITEA_REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.GITEA_REGISTRY_TOKEN }}
|
||||
- name: Push the smoke-tested image
|
||||
if: env.PUBLISH == 'true'
|
||||
env:
|
||||
IMAGE_TAGS: ${{ steps.image.outputs.tags }}
|
||||
run: |
|
||||
while IFS= read -r tag; do
|
||||
docker tag rust-xmpp:ci "$tag"
|
||||
docker push "$tag"
|
||||
printf 'Published `%s`\n' "$tag" >> "$GITHUB_STEP_SUMMARY"
|
||||
done <<< "$IMAGE_TAGS"
|
||||
Reference in new issue
Block a user