Skip to content

Fetch Licenses

Fetch Licenses #242

name: Fetch Licenses
on:
workflow_dispatch:
inputs:
force_run:
description: 'Force run license extraction'
required: false
default: 'false'
schedule:
- cron: '5 4 * * *' # Runs at 0405 UTC (0605 CET, 0005 ET, 2105 PT)
jobs:
fetch-licenses:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Setup Git
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Checkout this repository
uses: actions/checkout@v4
- name: Checkout official SPDX Repository
uses: actions/checkout@v4
with:
repository: spdx/license-list-data
path: official-spdx-licenses # creates a tmp dir to hold the SPDX licenses from the official repo
- name: Copy Licenses
run: |
cp official-spdx-licenses/json/licenses.json cmd/licenses.json
cp official-spdx-licenses/json/exceptions.json cmd/exceptions.json
- name: Get date
id: date
run: echo "DT_STAMP"=$(date +'%Y-%m-%d %H:%M UTC') >> $GITHUB_ENV
- name: Check for changes
id: changes
run: |
has_changes=true
# --quiet: Exits with 1 if there are changes; otherwise, exits with 0
# exiting with anything other than 0 implies the command failed and the command following && will not execute leaving has_changes set to true
# exiting with 0 implies the command was successful and the command following && will be executed setting has_changes to false
git diff --quiet -- cmd/licenses.json cmd/exceptions.json && has_changes=false
if [ $has_changes != 'true' ]; then
if [ ${{ github.event.inputs.force_run }} == 'true' ]; then
echo -e '***************\nNo changes, but skipping abort due to force run\n***************'
else
echo -e '***************\nABORTING: No changes to license data\n***************'
fi
fi
echo "HAS_CHANGES"=$has_changes >> $GITHUB_ENV
- name: Run license extraction
if: ${{ env.HAS_CHANGES == 'true' || github.event.inputs.force_run == 'true' }}
run: |
cd cmd
echo "Current branch: $(git branch)"
go run . extract -l -e
cd ..
git log --oneline -n 5
- name: Create Pull Request
if: ${{ env.HAS_CHANGES == 'true' || github.event.inputs.force_run == 'true' }}
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Add updated license files
branch: auto-update-licenses
base: main
title: "Update SPDX license files (${{ env.DT_STAMP }})"
body: "The files in this PR are auto-generated by the [fetch-licenses](./.git/workflows/fetch-license.yaml) workflow when it runs the `extract` command defined in [cmd/main.go](./cmd/main.go). It updates SPDX licenses based on the latest released set in the [spdx/license-list-data](https://github.com/spdx/license-list-data) repository maintained by [SPDX](https://spdx.org/licenses/). \n\nTODO: [spdxexp/spdxlicenses/license_ranges.go](./spdxexp/spdxlicenses/license_range.go) has to be updated manually."
labels: 'auto-update,licenses'