🏡 index : ~doyle/gitlab-cargo-shim.git

on: [push, pull_request]

name: Test

jobs:
  smoke:
    name: Smoke Test
    runs-on: ubuntu-latest
    services:
      gitlab:
        image: gitlab/gitlab-ee:latest
        options: --shm-size 256m
        ports:
          - 80:80
          - 443:443
    steps:
      - uses: actions/checkout@v4
      - name: Start gitlab-cargo-shim
        run: |
          docker build . -t gitlab-cargo-shim
          docker run --detach \
            --name gitlab-cargo-shim \
            --mount type=bind,source=$(pwd)/test/config.toml,target=/app/config.toml \
            --network host \
            gitlab-cargo-shim \
            -c /app/config.toml
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y python3-pip jq openssh-client
          pip3 install requests beautifulsoup4 html5lib
      - name: Wait for GitLab to boot
        run: timeout 20m bash -c 'until curl -s http://127.0.0.1/users/sign_in | grep csrf-token; do sleep 5; done'
      - name: Create GitLab package
        run: |
          export GITLAB_CONTAINER=$(docker ps --format "{{.ID}}" --no-trunc --filter "ancestor=gitlab/gitlab-ee:latest")
          export ROOT_PASSWORD=$(docker exec $GITLAB_CONTAINER grep 'Password:' /etc/gitlab/initial_root_password | sed 's/Password: //')
          export ROOT_PAT=$(python3 ./test/create_pat.py)
          curl -s --request POST --header "PRIVATE-TOKEN: $ROOT_PAT" --header "Content-Type: application/json" \
            --data '{"name": "example-lib"}' \
            --url 'http://127.0.0.1/api/v4/projects/'
          echo "ROOT_PAT=$ROOT_PAT" >> "$GITHUB_ENV"
      - name: Packaging example-lib
        run: |
          cd test/example-lib
          cargo package
          cargo metadata --format-version 1 > metadata.json
      - name: Uploading example-lib to GitLab
        run: |
          curl --header "PRIVATE-TOKEN: $ROOT_PAT" --upload-file test/example-lib/target/package/example-lib-0.1.0.crate http://127.0.0.1/api/v4/projects/root%2Fexample-lib/packages/generic/example-lib/0.1.0/example-lib-0.1.0.crate
          curl --header "PRIVATE-TOKEN: $ROOT_PAT" --upload-file test/example-lib/metadata.json http://127.0.0.1/api/v4/projects/root%2Fexample-lib/packages/generic/example-lib/0.1.0/metadata.json
      - name: Creating SSH key to identify with gitlab-cargo-shim
        run: |
          ssh-keygen -t ed25519 -C testkey -N '' -f ~/.ssh/id_ed25519
      - name: Fetching public keys from gitlab-cargo-shim and storing in known_hosts
        run: |
          ssh-keyscan -p 2233 127.0.0.1 > ~/.ssh/known_hosts
      - name: Write PAT to .config
        run: |
          echo -e "Host *\n    User personal-token:$ROOT_PAT" > ~/.ssh/config
      - name: Building example-bin using example-lib from registry
        run: |
          cd test/example-bin
          CARGO_NET_GIT_FETCH_WITH_CLI=true cargo check
      - name: Collect docker logs on failure
        if: failure()
        uses: jwalton/gh-docker-logs@v2
        with:
          dest: './logs'
      - name: Tar logs
        if: failure()
        run: tar cvzf ./logs.tgz ./logs
      - name: Upload logs as artifacts
        if: failure()
        uses: actions/upload-artifact@master
        with:
          name: logs.tgz
          path: ./logs.tgz