使用 Laravel 在合并之前或 Pull 请求期间运行测试用例的 Github 操作失败

问题描述 投票:0回答:1

我有一个设置,我的项目的根目录包含一个

.github
目录。例如,在这个目录旁边是
git
,在
src
旁边不可避免地有我的 基于 Laravel 的框架应用程序

.
├── .github // tests.yml resides within this directory under the workflows directory
├── README.md
├── docker-compose.yml
├── docs
└── src

Laravel源代码位于

src
文件夹下,当我创建Github Action来运行测试时,它们总是失败。以下是我的构建脚本的示例:

name: Build & Test Main

on:
  pull_request:
    branches: [main, develop]
    paths:
      - ".github/**"
      - "src/**"
jobs:
  build-test:
    name: Build & Test
    runs-on: ubuntu-20.04
    steps:
      - name: Setting MySql 8
        run: |
          echo -e "Enable LOAD DATA LOCAL INFILE in my.cnf\n"
          echo -e "SETTING secure-file-priv TO EMPTY STRING\n"
          echo -e "[mysqld]\nsecure-file-priv=''" | sudo tee -a /etc/mysql/my.cnf
          echo -e "SETTING local_infile TO ON\n"
          echo -e "[mysqld]\nlocal_infile='ON'" | sudo tee -a /etc/mysql/my.cnf
          echo -e "Start MYSQL service, it is off by default\n"
          sudo systemctl enable mysql.service
          sudo systemctl start mysql.service
          echo -e "Creating Laravel Database\n"
          mysql --host 127.0.0.1 -uroot -proot -e 'CREATE DATABASE IF NOT EXISTS laravel;'
          echo -e "Check new settings\n"
          mysql --host 127.0.0.1 -uroot -proot -e "SELECT @@global.secure_file_priv, @@global.local_infile"
      - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
        with:
          php-version: "8.1"
      - uses: actions/checkout@v2

      - name: Copy .env
        run: cp .env.example .env.ci

      - name: Install Dependencies
        run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

      - name: Generate key
        run: php artisan key:generate

      - name: Directory Permissions
        run: chmod -R 777 storage bootstrap/cache

      - name: Run migrations and seeders
        run: php artisan migrate:fresh --seed --force

      - name: Execute tests (Unit and Feature tests) via PHPUnit
        run: php artisan test --parallel

不幸的是,这并不能很好地工作,因为当它必须安装作曲家时它总是失败。我尝试了各种方法,甚至在每一步(包括全局)添加

working-dir
选项,但我无法获得任何积极的结果。

我几乎可以定义我需要的所有服务,就像我对

docker-compose.yml
文件所做的那样,除了问题似乎在于最终如何读取
composer.json
文件。

在我的整个项目中,下面的目录结构显示了我的项目是如何制定的。

.
├── README.md
├── docker-compose.yml
├── docs
│   └── images
└── src
    ├── CHANGELOG.md
    ├── README.md
    ├── app
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── env.testing
    ├── node_modules
    ├── package-lock.json
    ├── package.json
    ├── phpspec.yaml
    ├── phpunit.xml
    ├── postcss.config.js
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tailwind.config.js
    ├── tests
    ├── vendor
    └── webpack.mix.js

14 directories, 15 files

下面的图像显示了我的管道如何由于作曲家找不到

composer.json
文件或其前身而发生严重失败,因为它们都位于
src
目录中。

php github-actions pipeline laravel-10
1个回答
0
投票

我已经尝试过它,这将使您能够启动并运行。

由于您的作业包含需要从

src
工作目录执行的多个步骤,最简单的选择是将其设置为作业的默认工作目录。这将与您的“Setting MySql 8”步骤冲突(因为此时
@actions/checkout
尚未运行,因此
src
文件夹尚不存在),因此您需要覆盖该特定步骤的工作目录。

这会将您的

build-test
工作变成以下内容:

jobs:
  build-test:
    name: Build & Test
    runs-on: ubuntu-20.04
    defaults:
      run:
        working-directory: ./src
    steps:
      - name: Setting MySql 8
        run: |
          echo -e "Enable LOAD DATA LOCAL INFILE in my.cnf\n"
          echo -e "SETTING secure-file-priv TO EMPTY STRING\n"
          echo -e "[mysqld]\nsecure-file-priv=''" | sudo tee -a /etc/mysql/my.cnf
          echo -e "SETTING local_infile TO ON\n"
          echo -e "[mysqld]\nlocal_infile='ON'" | sudo tee -a /etc/mysql/my.cnf
          echo -e "Start MYSQL service, it is off by default\n"
          sudo systemctl enable mysql.service
          sudo systemctl start mysql.service
          echo -e "Creating Laravel Database\n"
          mysql --host 127.0.0.1 -uroot -proot -e 'CREATE DATABASE IF NOT EXISTS laravel;'
          echo -e "Check new settings\n"
          mysql --host 127.0.0.1 -uroot -proot -e "SELECT @@global.secure_file_priv, @@global.local_infile"
        working-directory: .

      - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
        with:
          php-version: "8.1"

      - uses: actions/checkout@v2

      - name: Copy .env
        run: cp .env.example .env

      - name: Install Dependencies
        run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

      - name: Generate key
        run: php artisan key:generate

      - name: Directory Permissions
        run: chmod -R 777 storage bootstrap/cache

      - name: Run migrations and seeders
        run: php artisan migrate:fresh --seed --force

      - name: Execute tests (Unit and Feature tests) via PHPUnit
        run: php artisan test --parallel

这将使 Github Actions 通过设置、Composer、密钥生成和目录权限步骤。

artisan migrate
仍然会失败,部分原因是
.env.example
文件中的凭据和数据库名称与您为 Github Actions 设置的数据库不匹配,而且还因为其中一个种子失败。但我会把这些留给你去弄清楚,或者在一个新问题中询问,因为这不再与运行 Github Actions 相关。

© www.soinside.com 2019 - 2024. All rights reserved.