docker compose exec неожиданно передает ненулевой код выхода в stderr в действиях Github

#docker #docker-compose #github-actions

Вопрос:

Вчера я перенес свой проект с TravisCI на действия Github, при этом весь остальной код остался нетронутым, но так и не был передан. Причина в том, что, docker-compose exec -T container command неожиданно повторив код выхода команды для ее stderr, я испортил свой код, обнаружив stderr.

Здесь я сделал простое репо только с двумя файлами, чтобы продемонстрировать проблему:

 # docker-compose.yaml

version: '3.3'

services:
  test:
    container_name: test
    image: ubuntu:18.04
    command: sleep 100
 
 # .github/workflows/test.yml

name: test

on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: up
        run: docker-compose up -d
      - run: docker-compose exec -T test false
        continue-on-error: true
      - run: docker-compose exec -T test bash -c "exit 3"
        continue-on-error: true
      - run: echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
        continue-on-error: true
      - run: echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
        continue-on-error: true
        shell: bash {0}
 

Выполнение этих команд на моей собственной машине дает такой результат:

 $ docker-compose exec -T test false
$ 

$ docker-compose exec -T test bash -c "exit 3"
$

$ echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
stderr
 

Но вот журнал действий Github:

 > Run docker-compose exec -T test false
1
Error: Process completed with exit code 1.

> Run docker-compose exec -T test bash -c "exit 3"
3
Error: Process completed with exit code 3.

> Run echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
stderr 1

// the one using bash {0}
> Run echo "stderr $(docker-compose exec -T test false 2>amp;1 >/dev/null)"
stderr 1
 

Так почему же эти коды выхода находятся в моем stderr при выполнении действий на Github?

Ответ №1:

Обнаружил, что его функция добавлена в 1.28.0-rc3, и была указана как проблема, которую необходимо исправить в 1.28.6.