aboutsummaryrefslogtreecommitdiffstats
path: root/.github/actions/setup/directories/action.yml
blob: 2878fa09331c1c26afcd1ebe416d947b8a628b8e (plain)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
name: Setup directories etc.
description: >-
  Set up the source code and build directories (plus some
  environmental tweaks)

inputs:
  srcdir:
    required: false
    default: ${{ github.workspace }}
    description: >-
      Directory to (re-)checkout source codes.  This will be created
      if absent.  If there is no `configure` file that is also
      generated inside.

  builddir:
    required: false
    default: ${{ github.workspace }}
    description: >-
      Where binaries and other generated contents go.  This will be
      created if absent.

  makeup:
    required: false
    type: boolean
    # Note that `default: false` evaluates to a string constant
    # `'false'`, which is a truthy value :sigh:
    # https://github.com/actions/runner/issues/2238
    default: ''
    description: >-
      If set to true, additionally runs `make up`.

  dummy-files:
    required: false
    type: boolean
    default: ''
    description: >-
      If set to true, creates dummy files in build dir.

outputs: {} # nothing?

runs:
  using: composite

  steps:
    # Note that `shell: bash` works on both Windows and Linux, but not
    # `shell: sh`.  This is because GitHub hosted Windows runners have
    # their bash manually installed.
    - shell: bash
      run: |
        mkdir -p ${{ inputs.srcdir }}
        mkdir -p ${{ inputs.builddir }}

    # Did you know that actions/checkout works without git(1)?  We are
    # checking that here.
    - id: which
      shell: bash
      run: |
        echo "git=`command -v git`" >> "$GITHUB_OUTPUT"
        echo "sudo=`command -v sudo`" >> "$GITHUB_OUTPUT"
        echo "autoreconf=`command -v autoreconf`" >> "$GITHUB_OUTPUT"

    - if: steps.which.outputs.git
      shell: bash
      run: |
        git config --global core.autocrlf false
        git config --global core.eol lf
        git config --global advice.detachedHead 0
        git config --global init.defaultBranch garbage

    - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
      with:
        path: ${{ inputs.srcdir }}

    - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
      with:
        path: ${{ inputs.srcdir }}/.downloaded-cache
        key: downloaded-cache

    - if: steps.which.outputs.autoreconf
      shell: bash
      working-directory: ${{ inputs.srcdir }}
      run: ./autogen.sh

    # This is for MinGW.
    - if: runner.os == 'Windows'
      shell: bash
      run: echo "GNUMAKEFLAGS=-j$((2 * NUMBER_OF_PROCESSORS))" >> $GITHUB_ENV

    - if: runner.os == 'Linux'
      shell: bash
      run: echo "GNUMAKEFLAGS=-sj$((1 + $(nproc --all)))" >> "$GITHUB_ENV"

    # macOS' GNU make is so old that they doesn't understand `GNUMAKEFLAGS`.
    - if: runner.os == 'macOS'
      shell: bash
      run: echo "MAKEFLAGS=-j$((1 + $(sysctl -n hw.activecpu)))" >> "$GITHUB_ENV"

    - if: inputs.makeup
      shell: bash
      working-directory: ${{ inputs.srcdir }}
      run: |
        touch config.status
        touch .rbconfig.time
        sed -f tool/prereq.status template/Makefile.in > Makefile
        sed -f tool/prereq.status template/GNUmakefile.in > GNUmakefile
        make up

    # Cleanup, runs even on failure
    - if: always() && inputs.makeup
      shell: bash
      working-directory: ${{ inputs.srcdir }}
      run: rm -f config.status Makefile rbconfig.rb .rbconfig.time

    - if: steps.which.outputs.sudo
      shell: bash
      run: |
        sudo chmod -R go-w /usr/share
        chmod -v go-w $HOME $HOME/.config || :
        sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || :

    - if: inputs.dummy-files == 'true'
      shell: bash
      working-directory: ${{ inputs.builddir }}
      run: |
        : Create dummy files in build dir
        for basename in {a..z} {A..Z} {0..9} foo bar test zzz; do
          echo > ${basename}.rb "raise %(do not load ${basename}.rb)"
        done