admin管理员组

文章数量:1313734

I've been working on my tests for an hour and it works on my machine but when I try to put it in github actions, it stops and it can't create any files for mocking.

I've no idea how to allow my action to write on github.

name: PHP Composer

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Validate composer.json and composer.lock
      run: composer validate --strict

    - name: Cache Composer packages
      id: composer-cache
      uses: actions/cache@v3
      with:
        path: vendor
        key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-php-

    - name: Install dependencies
      run: composer install --prefer-dist --no-progress

    # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit"
    # Docs: .md

    - name: Run test suite
      run: ./vendor/bin/phpunit

Here's my github action file

PHPUnit 11.5.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3
Configuration: /home/runner/work/archers-framework/archers-framework/phpunit.xml

..........FF..F..........................FF..FF.................. 65 / 97 ( 67%)
................................                                  97 / 97 (100%)

Time: 00:00.072, Memory: 10.00 MB

Authority (Tests\ArchersFramework\Http\Authority)
 ✔ Valid authority string
 ✔ Authority string without credentials
 ✔ Authority string without port
 ✔ Authority string without credentials and port
 ✔ Invalid authority string
 ✔ Authority with credentials only
 ✔ Authority to string

Container
 ✔ Get returns same instance for singleton
 ✔ Get returns new instance for factory
 ✔ Instance returns same object
 ✔ Autowires dependencies
 ✔ Throws exception for not autowireable class
 ✔ Inject attribute overrides default
 ✔ Throws exception for missing type hint
 ✔ Throws exception for unresolvable scalar type
 ✔ Handles nullable parameters
 ✔ Detects circular dependency

Controller Discovery (ArchersFramework\Tests\Router\Discovery\ControllerDiscovery)
 ✘ Discover controllers in windows path
   │
   │ Failed asserting that an array contains 'App\Controllers\WindowsTestController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:85
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✘ Discover controllers in linux path
   │
   │ Failed asserting that an array contains 'App\Controllers\LinuxTestController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:98
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✔ Ignores non php files
 ✔ Ignores php files with wrong extension
 ✘ Handles nested directories
   │
   │ Failed asserting that an array contains 'App\Controllers\Nested\DeepController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:137
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✘ Handles mixed directory separators
   │
   │ Failed asserting that an array contains 'App\Controllers\Mixed\PathController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:150
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✔ Handles empty directory gracefully

Glob Recursive (Tests\ArchersFramework\GlobRecursive)
 ✘ Glob recursive finds files
   │
   │ Failed asserting that actual size 0 matches expected size 2.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/GlobRecursiveTest.php:53
   │
 ✘ Glob recursive ignores non matching files
   │
   │ Failed asserting that actual size 0 matches expected size 1.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/GlobRecursiveTest.php:62
   │
 ✔ Glob recursive handles empty directory
 ✔ Glob recursive with no matches
 ✘ Glob recursive handles complex directory structures
   │
   │ Failed asserting that actual size 0 matches expected size 3.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/GlobRecursiveTest.php:89
   │

Header Collection (Tests\ArchersFramework\Http\HeaderCollection)
 ✔ Constructor initializes headers
 ✔ Get returns null if header does not exist
 ✔ Add adds new header value
 ✔ Set replaces existing header values
 ✔ Delete removes header
 ✔ Delete does nothing if header does not exist
 ✔ Get all returns all headers
 ✔ Headers are case insensitive

Path (ArchersFramework\Tests\Utilities\Path)
 ✔ Path joins multiple segments
 ✔ Path normalizes slashes
 ✔ Path trims leading and trailing slashes
 ✔ Empty path returns empty string
 ✔ Single segment path
 ✔ Path with mixed separators
 ✔ Windows absolute path
 ✔ Windows u n c path
 ✔ Linux absolute path
 ✔ Path with empty segments
 ✔ Path with multiple consecutive slashes
 ✔ Path with special characters
 ✔ Path with trailing backslash

Response
 ✔ Response constructor
 ✔ Send response

Route Discovery (ArchersFramework\Tests\Router\Discovery\RouteDiscovery)
 ✔ Discover routes from controller
 ✔ Discover routes with prefix from route collection
 ✔ Discover no routes
 ✔ Discover invalid controller class
 ✔ Discover routes with multiple controllers

Router (ArchersFramework\Tests\Router\Router)
 ✔ Dispatch returns response for valid route
 ✔ Dispatch handles parameterized route
 ✔ Dispatch throws not found for invalid route
 ✔ Dispatch throws method not allowed
 ✔ Resolve parameters returns parameters
 ✔ Resolve parameters returns null for mismatch

Template (ArchersFramework\Tests\Router\Template)
 ✔ Constructor parses valid template string
 ✔ Constructor defaults type to string
 ✔ Constructor throws exception for invalid template
 ✔ Is value valid returns true for valid int
 ✔ Is value valid returns false for invalid int
 ✔ Is value valid returns true for valid float
 ✔ Is value valid returns false for invalid float
 ✔ Is value valid returns true for boolean
 ✔ Is value valid returns false for invalid boolean
 ✔ Is value valid returns true for string
 ✔ Get processed value returns int
 ✔ Get processed value returns float
 ✔ Get processed value returns bool
 ✔ Get processed value returns string
 ✔ Get processed value throws exception for invalid value

ULID (Tests\ArchersFramework\Utilities\ULID)
 ✔ Generated ulid has correct length
 ✔ Generated ulid has valid characters
 ✔ Generated ulids are unique
 ✔ Generated ulid is uppercase by default
 ✔ Generated ulid can be lowercase
 ✔ Generated ulid parts are correct
 ✔ To string method returns expected value
 ✔ From string with valid ulid
 ✔ From string with lowercase ulid
 ✔ From string with invalid ulid throws exception

URI
 ✔ From string valid uri
 ✔ From string without query and fragment
 ✔ From string without schema
 ✔ From string without path
 ✔ From string invalid uri
 ✔ To string
 ✔ From string with port
 ✔ From string with credentials
 ✔ From string without credentials

FAILURES!
Tests: 97, Assertions: 166, Failures: 7.
Error: Process completed with exit code 1.

It's supposed to create the files in the environment temp directory

I've been working on my tests for an hour and it works on my machine but when I try to put it in github actions, it stops and it can't create any files for mocking.

I've no idea how to allow my action to write on github.

name: PHP Composer

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Validate composer.json and composer.lock
      run: composer validate --strict

    - name: Cache Composer packages
      id: composer-cache
      uses: actions/cache@v3
      with:
        path: vendor
        key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-php-

    - name: Install dependencies
      run: composer install --prefer-dist --no-progress

    # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit"
    # Docs: https://getcomposer./doc/articles/scripts.md

    - name: Run test suite
      run: ./vendor/bin/phpunit

Here's my github action file

PHPUnit 11.5.4 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3
Configuration: /home/runner/work/archers-framework/archers-framework/phpunit.xml

..........FF..F..........................FF..FF.................. 65 / 97 ( 67%)
................................                                  97 / 97 (100%)

Time: 00:00.072, Memory: 10.00 MB

Authority (Tests\ArchersFramework\Http\Authority)
 ✔ Valid authority string
 ✔ Authority string without credentials
 ✔ Authority string without port
 ✔ Authority string without credentials and port
 ✔ Invalid authority string
 ✔ Authority with credentials only
 ✔ Authority to string

Container
 ✔ Get returns same instance for singleton
 ✔ Get returns new instance for factory
 ✔ Instance returns same object
 ✔ Autowires dependencies
 ✔ Throws exception for not autowireable class
 ✔ Inject attribute overrides default
 ✔ Throws exception for missing type hint
 ✔ Throws exception for unresolvable scalar type
 ✔ Handles nullable parameters
 ✔ Detects circular dependency

Controller Discovery (ArchersFramework\Tests\Router\Discovery\ControllerDiscovery)
 ✘ Discover controllers in windows path
   │
   │ Failed asserting that an array contains 'App\Controllers\WindowsTestController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:85
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✘ Discover controllers in linux path
   │
   │ Failed asserting that an array contains 'App\Controllers\LinuxTestController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:98
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✔ Ignores non php files
 ✔ Ignores php files with wrong extension
 ✘ Handles nested directories
   │
   │ Failed asserting that an array contains 'App\Controllers\Nested\DeepController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:137
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✘ Handles mixed directory separators
   │
   │ Failed asserting that an array contains 'App\Controllers\Mixed\PathController'.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/Router/Discovery/ControllerDiscoveryTest.php:150
   │ /home/runner/work/archers-framework/archers-framework/vendor/bin/phpunit:122
   │
 ✔ Handles empty directory gracefully

Glob Recursive (Tests\ArchersFramework\GlobRecursive)
 ✘ Glob recursive finds files
   │
   │ Failed asserting that actual size 0 matches expected size 2.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/GlobRecursiveTest.php:53
   │
 ✘ Glob recursive ignores non matching files
   │
   │ Failed asserting that actual size 0 matches expected size 1.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/GlobRecursiveTest.php:62
   │
 ✔ Glob recursive handles empty directory
 ✔ Glob recursive with no matches
 ✘ Glob recursive handles complex directory structures
   │
   │ Failed asserting that actual size 0 matches expected size 3.
   │
   │ /home/runner/work/archers-framework/archers-framework/tests/GlobRecursiveTest.php:89
   │

Header Collection (Tests\ArchersFramework\Http\HeaderCollection)
 ✔ Constructor initializes headers
 ✔ Get returns null if header does not exist
 ✔ Add adds new header value
 ✔ Set replaces existing header values
 ✔ Delete removes header
 ✔ Delete does nothing if header does not exist
 ✔ Get all returns all headers
 ✔ Headers are case insensitive

Path (ArchersFramework\Tests\Utilities\Path)
 ✔ Path joins multiple segments
 ✔ Path normalizes slashes
 ✔ Path trims leading and trailing slashes
 ✔ Empty path returns empty string
 ✔ Single segment path
 ✔ Path with mixed separators
 ✔ Windows absolute path
 ✔ Windows u n c path
 ✔ Linux absolute path
 ✔ Path with empty segments
 ✔ Path with multiple consecutive slashes
 ✔ Path with special characters
 ✔ Path with trailing backslash

Response
 ✔ Response constructor
 ✔ Send response

Route Discovery (ArchersFramework\Tests\Router\Discovery\RouteDiscovery)
 ✔ Discover routes from controller
 ✔ Discover routes with prefix from route collection
 ✔ Discover no routes
 ✔ Discover invalid controller class
 ✔ Discover routes with multiple controllers

Router (ArchersFramework\Tests\Router\Router)
 ✔ Dispatch returns response for valid route
 ✔ Dispatch handles parameterized route
 ✔ Dispatch throws not found for invalid route
 ✔ Dispatch throws method not allowed
 ✔ Resolve parameters returns parameters
 ✔ Resolve parameters returns null for mismatch

Template (ArchersFramework\Tests\Router\Template)
 ✔ Constructor parses valid template string
 ✔ Constructor defaults type to string
 ✔ Constructor throws exception for invalid template
 ✔ Is value valid returns true for valid int
 ✔ Is value valid returns false for invalid int
 ✔ Is value valid returns true for valid float
 ✔ Is value valid returns false for invalid float
 ✔ Is value valid returns true for boolean
 ✔ Is value valid returns false for invalid boolean
 ✔ Is value valid returns true for string
 ✔ Get processed value returns int
 ✔ Get processed value returns float
 ✔ Get processed value returns bool
 ✔ Get processed value returns string
 ✔ Get processed value throws exception for invalid value

ULID (Tests\ArchersFramework\Utilities\ULID)
 ✔ Generated ulid has correct length
 ✔ Generated ulid has valid characters
 ✔ Generated ulids are unique
 ✔ Generated ulid is uppercase by default
 ✔ Generated ulid can be lowercase
 ✔ Generated ulid parts are correct
 ✔ To string method returns expected value
 ✔ From string with valid ulid
 ✔ From string with lowercase ulid
 ✔ From string with invalid ulid throws exception

URI
 ✔ From string valid uri
 ✔ From string without query and fragment
 ✔ From string without schema
 ✔ From string without path
 ✔ From string invalid uri
 ✔ To string
 ✔ From string with port
 ✔ From string with credentials
 ✔ From string without credentials

FAILURES!
Tests: 97, Assertions: 166, Failures: 7.
Error: Process completed with exit code 1.

It's supposed to create the files in the environment temp directory

Share Improve this question edited Feb 1 at 10:18 Ugo Brocard asked Jan 30 at 20:47 Ugo BrocardUgo Brocard 12 bronze badges 6
  • 1 Please include the specific error in your question. Seems related to contents: read. See Defining access for the GITHUB_TOKEN permissions. – Azeem Commented Jan 31 at 8:12
  • I’ll include it whenever I get home :) – Ugo Brocard Commented Jan 31 at 8:55
  • @Azeem here’s the exception I get: Failed asserting that actual size 0 matches expected size 2. It checks the numbet of files in a provided folder – Ugo Brocard Commented Jan 31 at 11:44
  • Please share the complete error trace. Also, verify the permissions and the path where the files are created e.g. with ls command. – Azeem Commented Jan 31 at 17:12
  • @Azeem I've provided you the complete output how do I execute the ls command on the github action environment ? – Ugo Brocard Commented Feb 1 at 10:18
 |  Show 1 more comment

1 Answer 1

Reset to default 0

It was related to my code. Thanks to @Azeem for his responses :)

The problem was that GitHub Action uses ":" as PATH_SEPARATOR and I was only handling "/".

本文标签: testingGitHub Actions Can39t Create Files For Mocking in PHPUnitStack Overflow