diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 93bada6..6152236 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -14,6 +14,11 @@ concurrency: group: pages cancel-in-progress: true +env: + # Keep in step with test.yml's pin -- docs runs `mojo doc`, which compiles the + # sources and so breaks on the same stdlib changes the tests do. + MOJO_VERSION: "1.0.0b3.dev2026073014" + jobs: build-deploy: runs-on: ubuntu-latest @@ -27,10 +32,10 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 - - name: Install Mojo nightly + - name: Install Mojo run: | uv venv - uv pip install mojo \ + uv pip install "mojo==$MOJO_VERSION" \ --index https://whl.modular.com/nightly/simple/ \ --prerelease allow diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 309832c..03fa3f1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,23 +4,46 @@ on: push: branches: [main] pull_request: + # Weekly drift check against the latest nightly. Advisory only -- it runs on + # main, so a failure never blocks a PR; it tells us the language moved under a + # frozen repo. See the install step for how the two modes differ. + schedule: + - cron: "32 13 * * 1" + workflow_dispatch: + +env: + # The nightly this repo is known to build and pass on. CI installs exactly + # this for pushes and PRs, so upstream churn cannot turn a green repo red + # without a commit. Bump it when the weekly drift check goes green on a newer + # one, or after fixing whatever it caught. + MOJO_VERSION: "1.0.0b3.dev2026073014" jobs: test: runs-on: ubuntu-latest timeout-minutes: 20 + permissions: + contents: read + issues: write steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v5 - - name: Install Mojo nightly + - name: Install Mojo run: | uv venv - uv pip install mojo \ - --index https://whl.modular.com/nightly/simple/ \ - --prerelease allow + if [ "${{ github.event_name }}" = "schedule" ]; then + echo "::notice::Drift check: installing the LATEST nightly, ignoring the $MOJO_VERSION pin" + uv pip install mojo \ + --index https://whl.modular.com/nightly/simple/ \ + --prerelease allow + else + uv pip install "mojo==$MOJO_VERSION" \ + --index https://whl.modular.com/nightly/simple/ \ + --prerelease allow + fi .venv/bin/mojo --version - name: Format check @@ -39,3 +62,32 @@ jobs: # write to a dead connection must raise, not kill the runner. - name: Connection regression tests run: .venv/bin/mojo run -I src test/test_connection.mojo + + - name: Report nightly drift + if: failure() && github.event_name == 'schedule' + env: + GH_TOKEN: ${{ github.token }} + run: | + title="Mojo nightly drift: tests fail against the latest nightly" + installed=$(.venv/bin/mojo --version 2>/dev/null || echo "unknown") + # Heredoc, not a quoted string: a multi-line shell string would keep + # this block's indentation and markdown would render the body as code. + body=$(cat < InlineArray[UInt8, 4]: i += 1 if idx != 4: raise Error("redis: invalid IPv4 host '" + host + "'") - return octets + return octets^ struct Connection(Movable): @@ -198,7 +198,7 @@ struct Connection(Movable): send_flags = Int32(0) while sent < total: var n = external_call["send", Int]( - self.fd, ptr + sent, total - sent, send_flags + self.fd, ptr.unsafe_offset(sent), total - sent, send_flags ) if n <= 0: # A failed write leaves the connection unusable; close it so a