File: autodoc.pl

package info (click to toggle)
golang-github-lestrrat-go-httprc 1.0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 168 kB
  • sloc: perl: 56; sh: 6; makefile: 2
file content (69 lines) | stat: -rw-r--r-- 2,431 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!perl
use strict;
use File::Temp;

# Accept a list of filenames, and process them
# if any of them has a diff, commit it

my @files = @ARGV;
my @has_diff;
for my $filename (@files) {
    open(my $src, '<', $filename) or die $!;

    my $output = File::Temp->new(SUFFIX => '.md');
    my $skip_until_end;
    for my $line (<$src>) {
        if ($line =~ /^<!-- END INCLUDE -->$/) {
            $skip_until_end = 0;
        } elsif ($skip_until_end) {
            next;
        }
        if ($line !~ /(^<!-- INCLUDE\(([^\),]+)(?:,([^\)]+))?\) -->)$/) {
            $output->print($line);
            next;
        }
        $output->print("$1\n");
    
        my $include_filename = $2;
        my $options = $3;
    
        $output->print("```go\n");
        my $content = do {
            open(my $file, '<', $include_filename) or die "failed to include file $include_filename from source file $filename: $!";
            local $/;
            <$file>;
        };
        $content =~ s{^(\t+)}{"  " x length($1)}gsme;
        $output->print($content);
        $output->print("```\n");
        $output->print("source: [$include_filename](https://github.com/lestrrat-go/jwx/blob/$ENV{GITHUB_REF}/$include_filename)\n");
    
        # now we need to skip copying until the end of INCLUDE
        $skip_until_end = 1;
    }
    $output->close();
    close($src);

    if (!$ENV{AUTODOC_DRYRUN}) {
        rename $output->filename, $filename or die $!;
        my $diff = `git diff $filename`;
        if ($diff) {
            push @has_diff, $filename;
        }
    }
}

if (!$ENV{AUTODOC_DRYRUN}) {
    if (@has_diff) {
        # Write multi-line commit message in a file
        my $commit_message_file = File::Temp->new(SUFFIX => '.txt');
        print $commit_message_file "autodoc updates\n\n";
        print "  - $_\n" for @has_diff;
        $commit_message_file->close();
        system("git", "remote", "set-url", "origin", "https://github-actions:$ENV{GITHUB_TOKEN}\@github.com/$ENV{GITHUB_REPOSITORY}") == 0 or die $!;
        system("git", "config", "--global", "user.name", "$ENV{GITHUB_ACTOR}") == 0 or die $!;
        system("git", "config", "--global", "user.email", "$ENV{GITHUB_ACTOR}\@users.noreply.github.com") == 0 or die $!;
        system("git", "commit", "-F", $commit_message_file->filename, @files) == 0 or die $!;
        system("git", "push", "origin", "HEAD:$ENV{GITHUB_REF}") == 0 or die $!;
    }
}