diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index e2289516..5c88bd15 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -31,63 +31,14 @@ concurrency: cancel-in-progress: true jobs: - build-cargo: - defaults: - run: - working-directory: moq-server - runs-on: ubuntu-20.04 - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Install Rust - id: toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: x86_64-unknown-linux-gnu - toolchain: stable - components: clippy, rustfmt - - - name: Cache Rust Dependencies - uses: Swatinem/rust-cache@v2 - with: - save-if: false - prefix-key: 'v0-rust-deps' - shared-key: x86_64-unknown-linux-gnu - - - name: Cargo build - run: cargo build --target x86_64-unknown-linux-gnu --manifest-path ./moq-pub/Cargo.toml --release - - - name: Copy and rename artifacts (Linux) - run: | - cp target/x86_64-unknown-linux-gnu/release/moq-pub ./warp - - - name: Publish artifacts - uses: actions/upload-artifact@v3 - with: - name: warp - path: ./moq-server/warp - if-no-files-found: error - retention-days: 5 - build-docker-pr: name: Build image on pr - needs: - - build-cargo runs-on: ubuntu-latest if: ${{ github.event_name == 'pull_request' }} steps: - name: Checkout repo uses: actions/checkout@v4 - - - name: Download go binary - uses: actions/download-artifact@v3 - with: - name: warp - path: ./ - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 @@ -105,8 +56,6 @@ jobs: name: Build image on merge to main if: ${{github.ref == 'refs/heads/main'}} runs-on: ubuntu-latest - needs: - - build-cargo permissions: contents: read packages: write diff --git a/.github/workflows/warp.yml b/.github/workflows/warp.yml index cc871141..d01c2f24 100644 --- a/.github/workflows/warp.yml +++ b/.github/workflows/warp.yml @@ -1,19 +1,108 @@ -name: CI for moq-rs +#Tabs not spaces, you moron :) + +name: CI for netris:warp on: - workflow_dispatch: - schedule: - - cron: 0 0 * * * # At the end of everyday - pull_request: #TODO: run only on dependabot updates - release: - types: [published] + pull_request: + paths: + - "warp.Dockerfile" + - ".github/workflows/warp.yml" + schedule: + - cron: 0 0 * * * # At the end of everyday + workflow_dispatch: + push: + branches: [main] + paths: + - "warp.Dockerfile" + - ".github/workflows/warp.yml" + tags: + - v*.*.* + release: + types: [published, created] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: wanjohiryan/netris + BASE_TAG_PREFIX: warp -# Cancel previous runs of the same workflow on the same branch. concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }} cancel-in-progress: true - + jobs: + build-docker-pr: + name: Build image on pr + runs-on: ubuntu-latest + if: ${{ github.event_name == 'pull_request' }} + steps: + - + name: Checkout repo + uses: actions/checkout@v4 + with: + submodules: recursive + - + name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + - + name: Build Docker image + uses: docker/build-push-action@v5 + with: + file: warp.Dockerfile + context: ./ + push: false + load: true + tags: netris:warp + + build-docker-main: + name: Build image on merge to main + if: ${{github.ref == 'refs/heads/main'}} + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - + name: Checkout repo + uses: actions/checkout@v4 + with: + submodules: recursive + - + name: Download warp + uses: actions/download-artifact@v3 + with: + name: warp + path: ./ + - + name: Log into registry ${{ env.REGISTRY }} + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - + name: Extract Container metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/${{ env.BASE_TAG_PREFIX }} + # + #tag on release, and a nightly build for 'dev' + tags: | + type=raw,value=nightly,enable={{is_default_branch}} + type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + - + name: Build Docker image + uses: docker/build-push-action@v5 + with: + file: warp.Dockerfile + context: ./ + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-warp-release: if: ${{ github.event_name == 'release' }} defaults: @@ -59,7 +148,7 @@ jobs: id: toolchain uses: dtolnay/rust-toolchain@stable with: - targets: x86_64-unknown-linux-gnu + targets: ${{ matrix.settings.target }} toolchain: stable components: clippy, rustfmt @@ -68,25 +157,25 @@ jobs: with: save-if: false prefix-key: 'v0-rust-deps' - shared-key: x86_64-unknown-linux-gnu + shared-key: ${{ matrix.settings.target }} - name: Cargo build - run: cargo build --target x86_64-unknown-linux-gnu --manifest-path ./moq-pub/Cargo.toml --release + run: cargo build --target ${{ matrix.settings.target }} --manifest-path ./moq-pub/Cargo.toml --release - name: Copy and rename artifacts (Linux) if: ${{ matrix.settings.host == 'ubuntu-20.04' }} run: | - cp target/x86_64-unknown-linux-gnu/release/moq-pub ./warp + cp target/${{ matrix.settings.target }}/release/moq-pub ./warp - name: Copy and rename artifacts (Windows) if: ${{ matrix.settings.host == 'windows-latest' }} run: | - cp "target/x86_64-unknown-linux-gnu/release/moq-pub.exe" ./warp.exe + cp "target/${{ matrix.settings.target }}/release/moq-pub.exe" ./warp.exe - name: Copy and rename artifacts (macOS) if: ${{ matrix.settings.host == 'macos-latest' }} run: | - cp target/x86_64-unknown-linux-gnu/release/moq-pub ./warp + cp target/${{ matrix.settings.target }}/release/moq-pub ./warp - name: Publish release for (${{ matrix.settings.host }}) if: ${{ matrix.settings.host == 'windows-latest' }} @@ -104,47 +193,4 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./moq-server/warp asset_name: ${{ matrix.settings.asset_name }} - tag: ${{ github.ref }} - - build-warp-pr: - if: ${{ github.event_name == 'pull_request' }} - name: Build warp on PR - defaults: - run: - working-directory: moq-server - runs-on: ubuntu-20.04 - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Install Rust - id: toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: x86_64-unknown-linux-gnu - toolchain: stable - components: clippy, rustfmt - - - name: Cache Rust Dependencies - uses: Swatinem/rust-cache@v2 - with: - save-if: false - prefix-key: 'v0-rust-deps' - shared-key: x86_64-unknown-linux-gnu - - - name: Cargo build - run: cargo build --target x86_64-unknown-linux-gnu --manifest-path ./moq-pub/Cargo.toml --release - - - name: Copy and rename artifacts (Linux) - run: | - cp target/x86_64-unknown-linux-gnu/release/moq-pub ./warp - - - name: Publish artifacts - uses: actions/upload-artifact@v3 - with: - name: warp-ubuntu-amd64 - path: ./moq-server/warp - if-no-files-found: error - retention-days: 5 \ No newline at end of file + tag: ${{ github.ref }} \ No newline at end of file diff --git a/server.Dockerfile b/server.Dockerfile index c73a2027..a101e584 100644 --- a/server.Dockerfile +++ b/server.Dockerfile @@ -40,8 +40,8 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ && chown $USERNAME:$USERNAME /home/$USERNAME \ && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime && echo "$TZ" > /etc/timezone -COPY warp /usr/bin/netris/ -RUN chmod +x /usr/bin/netris/warp +# COPY warp /usr/bin/netris/ +# RUN chmod +x /usr/bin/netris/warp COPY .scripts/entrypoint.sh .scripts/supervisord.conf /etc/ RUN chmod 755 /etc/supervisord.conf /etc/entrypoint.sh diff --git a/warp.Dockerfile b/warp.Dockerfile new file mode 100644 index 00000000..aeed275b --- /dev/null +++ b/warp.Dockerfile @@ -0,0 +1,13 @@ +FROM rust:bookworm as builder + +# Create a build directory and copy over all of the files +WORKDIR /build +COPY ./moq-server/ ./ +# Reuse a cache between builds. +# I tried to `cargo install`, but it doesn't seem to work with workspaces. +# There's also issues with the cache mount since it builds into /usr/local/cargo/bin +# We can't mount that without clobbering cargo itself. +# We instead we build the binaries and copy them to the cargo bin directory. +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/build/target \ + cargo build --manifest-path ./moq-pub/Cargo.toml --target x86_64-unknown-linux-gnu --release && cp target/x86_64-unknown-linux-gnu/release/moq-pub /usr/bin/warp