Rust implementation of OCI Distribution Spec with granular access control

Remove .github configuration (migrated to tangled)

-204
-6
.github/dependabot.yml
··· 1 - version: 2 2 - updates: 3 - - package-ecosystem: "cargo" 4 - directory: "/" 5 - schedule: 6 - interval: "weekly"
-66
.github/workflows/docker-publish.yml
··· 1 - name: Docker Build and Publish 2 - 3 - on: 4 - push: 5 - branches: 6 - - main 7 - tags: 8 - - 'v*' 9 - pull_request: 10 - branches: 11 - - main 12 - 13 - env: 14 - REGISTRY: ghcr.io 15 - IMAGE_NAME: ${{ github.repository }} 16 - 17 - jobs: 18 - build-and-push: 19 - runs-on: ubuntu-latest 20 - permissions: 21 - contents: read 22 - packages: write 23 - 24 - steps: 25 - - name: Checkout repository 26 - uses: actions/checkout@v4 27 - 28 - - name: Set up Docker Buildx 29 - uses: docker/setup-buildx-action@v3 30 - 31 - - name: Log in to Container Registry 32 - if: github.event_name != 'pull_request' 33 - uses: docker/login-action@v3 34 - with: 35 - registry: ${{ env.REGISTRY }} 36 - username: ${{ github.actor }} 37 - password: ${{ secrets.GITHUB_TOKEN }} 38 - 39 - - name: Extract metadata 40 - id: meta 41 - uses: docker/metadata-action@v5 42 - with: 43 - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} 44 - tags: | 45 - type=ref,event=branch 46 - type=ref,event=pr 47 - type=semver,pattern={{version}} 48 - type=semver,pattern={{major}}.{{minor}} 49 - type=semver,pattern={{major}} 50 - type=raw,value=latest,enable={{is_default_branch}} 51 - 52 - - name: Build and push Docker image 53 - id: build 54 - uses: docker/build-push-action@v5 55 - with: 56 - context: . 57 - push: ${{ github.event_name != 'pull_request' }} 58 - tags: ${{ steps.meta.outputs.tags }} 59 - labels: ${{ steps.meta.outputs.labels }} 60 - cache-from: type=gha 61 - cache-to: type=gha,mode=max 62 - platforms: linux/amd64,linux/arm64 63 - 64 - - name: Image digest 65 - if: github.event_name != 'pull_request' 66 - run: echo "Image pushed successfully"
-132
.github/workflows/rust.yml
··· 1 - name: Rust 2 - on: 3 - push: 4 - branches: ["main"] 5 - pull_request: 6 - branches: ["main"] 7 - 8 - env: 9 - CARGO_TERM_COLOR: always 10 - 11 - jobs: 12 - format: 13 - name: Check format 14 - runs-on: ubuntu-latest 15 - steps: 16 - - uses: actions/checkout@v4 17 - - name: Check format 18 - run: cargo fmt -- --check 19 - 20 - lint: 21 - name: Lint 22 - runs-on: ubuntu-latest 23 - steps: 24 - - uses: actions/checkout@v4 25 - - name: Lint all targets 26 - run: cargo clippy --all-targets --all-features -- -D warnings 27 - 28 - build: 29 - name: Build 30 - runs-on: ubuntu-latest 31 - steps: 32 - - uses: actions/checkout@v4 33 - - name: Build all binaries 34 - run: cargo build --verbose --all-targets 35 - - name: Build grain binary 36 - run: cargo build --verbose --bin grain 37 - - name: Build grainctl binary 38 - run: cargo build --verbose --bin grainctl 39 - 40 - build-release: 41 - name: Build Release 42 - runs-on: ubuntu-latest 43 - steps: 44 - - uses: actions/checkout@v4 45 - - name: Build release binaries 46 - run: cargo build --release --all-targets 47 - - name: Verify grain binary exists 48 - run: test -f target/release/grain 49 - - name: Verify grainctl binary exists 50 - run: test -f target/release/grainctl 51 - - name: Upload grain binary 52 - uses: actions/upload-artifact@v4 53 - with: 54 - name: grain-binary 55 - path: target/release/grain 56 - - name: Upload grainctl binary 57 - uses: actions/upload-artifact@v4 58 - with: 59 - name: grainctl-binary 60 - path: target/release/grainctl 61 - 62 - test: 63 - name: Test 64 - runs-on: ubuntu-latest 65 - steps: 66 - - uses: actions/checkout@v4 67 - - name: Run unit tests 68 - run: cargo test --verbose --all-targets 69 - - name: Run integration tests 70 - run: cargo test --verbose --test '*' 71 - 72 - e2e-test: 73 - name: E2E Tests 74 - runs-on: ubuntu-latest 75 - needs: build 76 - steps: 77 - - uses: actions/checkout@v4 78 - - name: Build release binaries 79 - run: cargo build --release 80 - - name: Run E2E tests (without Docker) 81 - run: cargo test --verbose --test '*' -- --test-threads=1 82 - - name: Run Docker client tests 83 - run: cargo test --verbose --test docker_client --features docker-tests -- --test-threads=1 84 - continue-on-error: true 85 - - name: Upload test logs on failure 86 - if: failure() 87 - uses: actions/upload-artifact@v4 88 - with: 89 - name: e2e-test-logs 90 - path: | 91 - target/debug/ 92 - /tmp/grain-test-*/ 93 - retention-days: 3 94 - 95 - integration-test: 96 - name: Integration Test 97 - runs-on: ubuntu-latest 98 - needs: build 99 - steps: 100 - - uses: actions/checkout@v4 101 - - name: Build binaries 102 - run: cargo build --release 103 - - name: Create test users file 104 - run: | 105 - mkdir -p tmp 106 - cat > tmp/users.json << 'EOF' 107 - { 108 - "users": [ 109 - { 110 - "username": "admin", 111 - "password": "admin", 112 - "permissions": [{"repository": "*", "tag": "*", "actions": ["pull", "push", "delete"]}] 113 - } 114 - ] 115 - } 116 - EOF 117 - - name: Start grain server 118 - run: | 119 - ./target/release/grain --host 127.0.0.1:8888 --users-file ./tmp/users.json & 120 - sleep 3 121 - - name: Test server is running 122 - run: curl -f -u admin:admin http://127.0.0.1:8888/v2/ 123 - - name: Test grainctl list users 124 - run: ./target/release/grainctl user list --url http://127.0.0.1:8888 --username admin --password admin 125 - - name: Test grainctl create user 126 - run: ./target/release/grainctl user create testuser --pass testpass --url http://127.0.0.1:8888 --username admin --password admin 127 - - name: Test grainctl add permission 128 - run: ./target/release/grainctl user add-permission testuser --repository "test/*" --tag "*" --actions "pull" --url http://127.0.0.1:8888 --username admin --password admin 129 - - name: Test grainctl delete user 130 - run: ./target/release/grainctl user delete testuser --url http://127.0.0.1:8888 --username admin --password admin 131 - - name: Stop server 132 - run: pkill -f "grain.*--host" || true