Laravel项目Github Action测试失败:Composer找不到composer.json
问题:Github Action执行Composer安装时找不到src目录下的composer.json
项目根目录包含.github、src等目录,.github/workflows下存放测试用的tests.yml,Laravel框架源码全部在src文件夹内。配置了Github Action在针对main、develop分支的Pull Request中自动运行测试,但每次都卡在Composer依赖安装步骤——提示找不到composer.json文件,试过给步骤加working-dir参数但没解决。
现有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
项目目录结构
. ├── 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
解决方案
核心问题是所有Laravel相关操作都需要在src目录下执行,之前的步骤默认在项目根目录运行,所以找不到src里的composer.json。修改Action配置,给所有Laravel相关步骤加上working-directory: ./src参数即可:
修改后的完整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 working-directory: ./src run: cp .env.example .env.ci - name: Install Dependencies working-directory: ./src run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: Generate key working-directory: ./src run: php artisan key:generate - name: Directory Permissions working-directory: ./src run: chmod -R 777 storage bootstrap/cache - name: Run migrations and seeders working-directory: ./src run: php artisan migrate:fresh --seed --force - name: Execute tests (Unit and Feature tests) via PHPUnit working-directory: ./src run: php artisan test --parallel
关键修改点
- 给
Copy .env、Install Dependencies、Generate key等所有涉及Laravel文件/命令的步骤,添加working-directory: ./src,让命令在src目录下执行。 - 若之前尝试过类似参数但无效,检查参数名是否正确:Github Action的工作目录参数是
working-directory,而非working-dir,拼写错误会导致参数不生效。
内容的提问来源于stack exchange,提问作者scruffycoder86
相关产品推荐
相关产品推荐

