You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:04:51