Что делать, если не срабатывает использование тестового профиля Java в Workflow gihub'a?

Столкнулся со следующей проблемой:

Имеется интеграционный тест, использующий тестовый профиль


@ActiveProfiles("test")
@DataJpaTest
@AutoConfigureTestDatabase(replace = NONE)
class TelegramUserRepositoryIT {

    @Autowired
    private TelegramUserRepository telegramUserRepository;

    @Sql(scripts = {"/sql/clear_tg_users.sql", "/sql/insert_tg_users.sql"})
    @Test
    public void shouldProperlyFindAllActiveUsers() {
        //when
        List<TelegramUser> users = telegramUserRepository.findAllByActiveTrue();

        //then
        Assertions.assertEquals(5, users.size());
    }

    @Sql(scripts = {"/sql/clear_tg_users.sql"})
    @Test
    public void shouldProperlySaveTelegramUser() {
        //given
        TelegramUser telegramUser = new TelegramUser();
        telegramUser.setChatId("1234567890");
        telegramUser.setActive(false);
        telegramUserRepository.save(telegramUser);

        //when
        Optional<TelegramUser> saved = telegramUserRepository.findById(telegramUser.getChatId());

        //then
        Assertions.assertTrue(saved.isPresent());
        Assertions.assertEquals(telegramUser, saved.get());
    }
}

И соответсвенно, два файла с пропертями, в которых прописаны данные для реального подключения к БД и для тестового

application.properties - здесь используется БД из контейнера Докера, поднятая в той же сети что и приложение. Имя БД jrtb-db

bot.username = ${BOT_NAME}
bot.token = ${BOT_TOKEN}

spring.datasource.url=jdbc:postgresql://jrtb-db:5432/jrtb_db
spring.datasource.username = ${BOT_DB_NAME}
spring.datasource.password = ${BOT_DB_PASSWORD}
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.driver-class-name = org.postgresql.Driver

application-test.properties - БД, поднятая на localost

bot.username = ${BOT_NAME}
bot.token = ${BOT_TOKEN}

spring.datasource.url=jdbc:postgresql://localhost:5432/dev_jrtb_db
spring.datasource.username=dev_jrtb_user
spring.datasource.password=dev_jrtb_pass
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.driver-class-name = org.postgresql.Driver

При ручном запуске теста с поднятой на локалхосте БД, всё работает норм. Для подключения используются данные из application-test.properties

При запуске workflow на гитхабе, тесты ломаются с ошибкой

org.postgresql.util.PSQLException: The connection attempt failed.
Caused by: java.net.UnknownHostException: jrtb-db

Судя по выведенному имя БД, используются данные из application.properties. И это действительно так.

Вопрос - как сделалать, чтобы данные для подключения смотрелись в application-test.properties ? Почему на срабатывает @ActiveProfiles("test") ?

Файл worflow github'a:

# Имя workflow, т.е. рабочего процесса, который будет в git hub actions
name: Java CI with Maven
# указываем, при каких действиях он будет вызываться.
# Подробный список действий  https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
#  указываем "работы" (группировки действий), которые будут выполняться в рамках текущего workflow
# по умолчанию выполняются параллельно друг другу. Можно настроить, чтобы последовательно
jobs:
  #  имя работы
  build:
    #  какое то разрешение
    permissions: write-all
    #  указываем на чем она будет запускаться ( можно виндоус еше и т д. Это ресурсы гитхаба)
    runs-on: ubuntu-latest

    services:
      # Label used to access the service container
      postgres:
        # Docker Hub image
        image: postgres
        # Provide the password for postgres
        env:
          POSTGRES_USER: dev_jrtb_user
          POSTGRES_PASSWORD: dev_jrtb_pass
          POSTGRES_DB: dev_jrtb_db

        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          # Maps tcp port 5432 on service container to the host
          - 5432:5432
    #  указываем конкретные шаги в рамках текущей работы, которые надо выполнить
    steps:
      #  имя шага
      - name: Checkout
      #  указываем действие. Действие - это сразу группа команд. Действия есть куча предопределенных, их можно брать тут https://github.com/marketplace?type=actions
        uses: actions/checkout@v3
      #  имя след шага
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        #  для текущего действия надо задать доп параметры
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven
      - name: Build with Maven
        env:
          BOT_NAME: ${{ secrets.BOT_NAME }}
          BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
          POSTGRES_HOST: localhost
          # The default PostgreSQL port
          POSTGRES_PORT: 5432
        #  вместо действия можно указать конкретнкую команду, которая выполнится. Здесь мы указываем, чтобы выполнилась команда mvn -B package --file pom.xml
        #  выполнится она на ubuntu-latest, которую мы указали ранее  для Job
        run: mvn -B package --file pom.xml

      # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
      - name: Update dependency graph
        uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6

Полный код:

https://github.com/Naroru/JavaRushTelegramBot/tree/STEP_5_JRTB-1


Ответы (0 шт):