• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

eliashaeussler / composer-update-check / 15182034191

22 May 2025 03:06AM UTC coverage: 20.538%. First build
15182034191

Pull #130

github

web-flow
[TASK] Update all dependencies
Pull Request #130: [!!!][FEATURE] Modernize plugin

356 of 1832 new or added lines in 57 files covered. (19.43%)

382 of 1860 relevant lines covered (20.54%)

1.11 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/IO/Formatter/GitHubFormatter.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Composer package "eliashaeussler/composer-update-check".
7
 *
8
 * Copyright (C) 2020-2025 Elias Häußler <elias@haeussler.dev>
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation, either version 3 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22
 */
23

24
namespace EliasHaeussler\ComposerUpdateCheck\IO\Formatter;
25

26
use Composer\Factory;
27
use Composer\Util;
28
use EliasHaeussler\ComposerUpdateCheck\Entity;
29
use Symfony\Component\Console;
30
use Symfony\Component\Filesystem;
31

32
use function realpath;
33
use function sprintf;
34

35
/**
36
 * GitHubFormatter.
37
 *
38
 * @author Elias Häußler <elias@haeussler.dev>
39
 * @license GPL-3.0-or-later
40
 */
41
final class GitHubFormatter implements Formatter
42
{
43
    public const FORMAT = 'github';
44

NEW
45
    public function __construct(
×
46
        private ?Console\Style\SymfonyStyle $io = null,
NEW
47
    ) {}
×
48

NEW
49
    public function formatResult(Entity\Result\UpdateCheckResult $result): void
×
50
    {
51
        // Early return if IO is missing
NEW
52
        if (null === $this->io) {
×
NEW
53
            return;
×
54
        }
55

56
        // Resolve path to composer.json file
NEW
57
        $composerFile = Filesystem\Path::makeRelative(
×
NEW
58
            (string) realpath(Factory::getComposerFile()),
×
NEW
59
            Util\Platform::getCwd(),
×
NEW
60
        );
×
61

NEW
62
        $outdatedPackages = $result->getOutdatedPackages();
×
NEW
63
        $excludedPackages = $result->getExcludedPackages();
×
64

NEW
65
        foreach ($outdatedPackages as $outdatedPackage) {
×
NEW
66
            $this->writePackageToOutput(
×
NEW
67
                $composerFile,
×
NEW
68
                sprintf('Package %s is outdated', $outdatedPackage->getName()),
×
NEW
69
                sprintf(
×
70
                    // %0A is an encoded newline
NEW
71
                    'Outdated version: %s%%0ANew version: %s%s',
×
NEW
72
                    $outdatedPackage->getOutdatedVersion(),
×
NEW
73
                    $outdatedPackage->getNewVersion(),
×
NEW
74
                    $outdatedPackage->isInsecure() ? '%0A🚨 Package is insecure' : '',
×
NEW
75
                ),
×
NEW
76
                'warning',
×
NEW
77
            );
×
78
        }
79

NEW
80
        foreach ($excludedPackages as $excludedPackage) {
×
NEW
81
            $this->writePackageToOutput(
×
NEW
82
                $composerFile,
×
NEW
83
                sprintf('Package %s was excluded', $excludedPackage->getName()),
×
NEW
84
                'Package was excluded due to a configured exclude pattern.',
×
NEW
85
                'notice',
×
NEW
86
            );
×
87
        }
88
    }
89

NEW
90
    private function writePackageToOutput(string $composerFile, string $title, string $message, string $severity): void
×
91
    {
NEW
92
        $this->io?->writeln(
×
93
            // https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
NEW
94
            sprintf('::%s file=%s,title=%s::%s', $severity, $composerFile, $title, $message),
×
NEW
95
        );
×
96
    }
97

NEW
98
    public function setIO(Console\Style\SymfonyStyle $io): void
×
99
    {
NEW
100
        $this->io = $io;
×
101
    }
102

NEW
103
    public static function getFormat(): string
×
104
    {
NEW
105
        return self::FORMAT;
×
106
    }
107
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc