diff --git a/.ci/license-header.rb b/.ci/license-header.rb new file mode 100755 index 000000000..e7d24e4c5 --- /dev/null +++ b/.ci/license-header.rb @@ -0,0 +1,49 @@ +#!/usr/bin/ruby +# frozen_string_literal: true + +license_header = <<~EOF + // Copyright Citra Emulator Project / Lime3DS Emulator Project + // Licensed under GPLv2 or any later version + // Refer to the license.txt file included. + EOF + +print 'Getting branch changes...' +branch_name = `git rev-parse --abbrev-ref HEAD`.chomp +branch_commits = `git log #{branch_name} --not master --pretty=format:"%h"`.split("\n") +branch_commit_range = "#{branch_commits[-1]}^..#{branch_commits[0]}" +branch_changed_files = `git diff-tree --no-commit-id --name-only #{branch_commit_range} -r`.split("\n") +puts 'done' + +print 'Checking files...' +issue_files = [] + +branch_changed_files.each do |file_name| + if file_name.end_with?('.cpp', '.h', '.kt') + file_content = File.read(file_name) + if not file_content.start_with?(license_header) + issue_files.push(file_name) + end + end +end +puts 'done' + +if issue_files.empty? + puts "\nAll changed files have correct headers" + exit 0 +end + +puts <<-EOF + +The following #{issue_files.length} files have incorrect license headers: +#{issue_files.join("\n")} + +The following license header should be added to the start of all offending files: +=== BEGIN === +#{license_header} +=== END === + +If some of the code in this PR is not being contributed by the original author, the files which have been exclusively changed by that code can be ignored. +If this happens, this PR requirement can be bypassed once all other files are addressed. +EOF + +exit 1 \ No newline at end of file diff --git a/.github/workflows/license-header.yml b/.github/workflows/license-header.yml new file mode 100644 index 000000000..5caf0fe61 --- /dev/null +++ b/.github/workflows/license-header.yml @@ -0,0 +1,20 @@ +name: lime-license + +on: + pull_request: + branches: [ master ] + +jobs: + license-header: + runs-on: ubuntu-latest + container: + image: opensauce04/lime3ds-build:latest + options: -u 1001 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Fetch master branch + run: git fetch origin master:master + - name: Check license headers + run: ./.ci/license-header.rb