From 5f70b02c3bec0e3398c365d88e93e2f69d822413 Mon Sep 17 00:00:00 2001 From: csjones Date: Sun, 2 Jun 2024 22:43:09 -0700 Subject: [PATCH] Swift plugin template --- .github/workflows/build.yml | 23 +++++ .github/workflows/check-github-release.yml | 63 +++++++++++++ .github/workflows/publish-artifact-bundle.yml | 92 +++++++++++++++++++ .gitignore | 90 ++++++++++++++++++ Dockerfile | 11 +++ LICENSE | 21 +++++ Package.swift | 35 +++++++ Plugins/TemplatePlugin/TemplatePlugin.swift | 41 +++++++++ README.md | 4 + Resources/template.artifactbundle/info.json | 51 ++++++++++ 10 files changed, 431 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/check-github-release.yml create mode 100644 .github/workflows/publish-artifact-bundle.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Package.swift create mode 100644 Plugins/TemplatePlugin/TemplatePlugin.swift create mode 100644 README.md create mode 100644 Resources/template.artifactbundle/info.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..fe2a5c1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,23 @@ +name: Build + +# on: +# push: +# branches: [ main ] +# pull_request: +# branches: [ main ] + +jobs: + macOS: + name: Test + runs-on: macOS-13 + steps: + - uses: actions/checkout@v3 + - name: List available plugins in macOS + run: swift package plugin template + + Linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Build Docker image + run: docker build . diff --git a/.github/workflows/check-github-release.yml b/.github/workflows/check-github-release.yml new file mode 100644 index 0000000..a977862 --- /dev/null +++ b/.github/workflows/check-github-release.yml @@ -0,0 +1,63 @@ +name: Check GitHub Release + +# on: +# schedule: +# Daily at 8:20 UTC and 20:20 UTC +# - cron: '20 8,20 * * *' +# # Enables manually running this workflow from the Actions tab +# workflow_dispatch: + +jobs: + check: + name: Check GitHub Release + runs-on: ubuntu-latest + env: + BINARY_NAME: lefthook + BINARY_REPO: evilmartians/lefthook + PLUGIN_REPO: 21-DOT-DEV/swift-plugin-template + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SEMANTIC_VERSIONING_REGEX: (v?[0-9]+\.[0-9]+\.[0-9]+) + outputs: + BINARY_NAME: ${{ env.BINARY_NAME }} + BINARY_REPO: ${{ env.BINARY_REPO }} + BINARY_VERSION: ${{ steps.two.outputs.BINARY_VERSION }} + PLUGIN_VERSION: ${{ steps.one.outputs.PLUGIN_VERSION }} + steps: + - name: Get current plugin version + id: one + run: | + PLUGIN_RELEASE=$(gh release list -R ${{ github.repository }} -L 1) + echo "PLUGIN_VERSION=$(echo $PLUGIN_RELEASE | grep -oE "${{ env.SEMANTIC_VERSIONING_REGEX }}" | head -n1)" >> $GITHUB_OUTPUT + - name: Get current binary version + id: two + run: | + BINARY_RELEASE=$(gh release list -R ${{ env.BINARY_REPO }} -L 1) + echo "BINARY_VERSION=$(echo $BINARY_RELEASE | grep -oE "${{ env.SEMANTIC_VERSIONING_REGEX }}" | head -n1)" >> $GITHUB_OUTPUT + - name: Get trimmed binary version + id: three + run: | + # The example binary includes a leading 'v' in the release version number. We drop it on the next line. + echo "TRIMMED_BINARY_VERSION=$(echo ${{ steps.two.outputs.BINARY_VERSION }} | cut -c2-)" >> $GITHUB_OUTPUT + debug: + name: Debug Outputs + needs: check + runs-on: ubuntu-latest + steps: + - name: Print outputs from check job + run: | + echo "${{ needs.check.outputs.BINARY_NAME }}" + echo "${{ needs.check.outputs.BINARY_REPO }}" + echo "${{ needs.check.outputs.BINARY_VERSION }}" + echo "${{ github.repository }}" + echo "${{ needs.check.outputs.PLUGIN_VERSION }}" + echo "${{ needs.check.outputs.TRIMMED_BINARY_VERSION }}" + trigger: + name: Trigger Artifact Publish + needs: check + uses: ./.github/workflows/publish-artifact-bundle.yml + with: + binary_name: ${{ needs.check.outputs.BINARY_NAME }} + binary_repo: ${{ needs.check.outputs.BINARY_REPO }} + binary_version: ${{ needs.check.outputs.BINARY_VERSION }} + plugin_repo: ${{ github.repository }} + if: ${{ needs.check.outputs.PLUGIN_VERSION != needs.check.outputs.TRIMMED_BINARY_VERSION }} \ No newline at end of file diff --git a/.github/workflows/publish-artifact-bundle.yml b/.github/workflows/publish-artifact-bundle.yml new file mode 100644 index 0000000..c4ee181 --- /dev/null +++ b/.github/workflows/publish-artifact-bundle.yml @@ -0,0 +1,92 @@ +name: Publish Artifact Bundle + +# on: +# workflow_call: +# inputs: +# binary_name: +# required: true +# type: string +# binary_repo: +# required: true +# type: string +# binary_version: +# required: true +# type: string +# plugin_repo: +# required: true +# type: string + +# # Enables manually running this workflow from the Actions tab +# workflow_dispatch: +# inputs: +# binary_name: +# required: true +# type: string +# binary_repo: +# required: true +# type: string +# binary_version: +# required: true +# type: string +# plugin_repo: +# required: true +# type: string + +jobs: + publish: + name: Publish Artifact Bundle + runs-on: macOS-13 + env: + PLUGIN_VERSION: ${{ inputs.binary_version }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + path: ${{ inputs.binary_name }} + - name: Get latest binaries + run: | + gh release download ${{ inputs.binary_version }} \ + -R "${{ inputs.binary_repo }}" \ + -p '*MacOS*64' \ + -p '*Linux*64' \ + -p '*Windows*64.exe' \ + -p '*.deb' \ + -p '*.rpm' \ + -D '${{ inputs.binary_name }}/Resources/template.artifactbundle' + - name: Update GitHub Env Vars + run: | + # The example binary includes a leading 'v' in the release version number. We drop it on the next line. + echo "PLUGIN_VERSION=$(echo $PLUGIN_VERSION | cut -c2-)" >> $GITHUB_ENV + echo "ARTIFACT_NAME=${{ inputs.binary_name }}.artifactbundle.zip" >> $GITHUB_ENV + echo "ARTIFACT_PATH=${{ inputs.binary_name }}/Resources/template.artifactbundle" >> $GITHUB_ENV + echo "ESCAPED_PLUGIN_REPO=$(echo "${{ inputs.plugin_repo }}" | sed 's/\//\\\//g')" >> $GITHUB_ENV + - name: Set info.json version + run: | + sed -i '' "s//${{ env.PLUGIN_VERSION }}/g" ${{ env.ARTIFACT_PATH }}/info.json + sed -i '' "s/