name: Create Module Files For GitHub Release env: # The URL used for the module's "Project URL" link on FoundryVTT's website. project_url: "https://github.com/${{github.repository}}" # A URL that will always point to the latest manifest. # FoundryVTT uses this URL to check whether the current module version that # is installed is the latest version. This URL should NOT change, # otherwise FoundryVTT won't be able to perform this check. latest_manifest_url: "https://github.com/${{github.repository}}/releases/latest/download/module.json" # The URL to the module archive associated with the module release being # processed by this workflow. release_module_url: "https://github.com/${{github.repository}}/releases/download/${{github.event.release.tag_name}}/module.zip" on: # Only run this workflow when a release is published. # To modify this workflow when other events occur, see: # - https://docs.github.com/en/actions/using-workflows/triggering-a-workflow # - https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows # - https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on # # Note that some steps may depend on context variables that are only # available for release events, so if you add other events, you may need to # alter other parts of this workflow. release: types: [published] jobs: build: runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout Repository uses: actions/checkout@v3 # Extract version embedded in the tag. # This step expects the tag to be one of the following formats: # - "v.." (e.g., "v1.2.3") # - ".." (e.g., "1.2.3") # # The version will be used by later steps to fill in the value for the # "version" key required for a valid module manifest. - name: Extract Version From Tag id: get_version uses: battila7/get-version-action@v2 # Modify "module.json" with values specific to the release. # Since the values for the "version" and "url" keys aren't known ahead of # time, the manifest file in the repository is updated with these values. # # While this does modify the manifest file in-place, the changes are not # commited to the repository, and only exist in the action's filesystem. - name: Modify Module Manifest With Release-Specific Values id: sub_manifest_link_version uses: cschleiden/replace-tokens@v1 with: files: 'module.json' env: VERSION: ${{steps.get_version.outputs.version-without-v}} URL: ${{ env.project_url }} MANIFEST: ${{ env.latest_manifest_url }} DOWNLOAD: ${{ env.release_module_url }} # Create a "module.zip" archive containing all the module's required files. # If you have other directories or files that will need to be added to # your packaged module, add them here. - name: Create Module Archive run: | # Note that `zip` will only emit warnings when a file or directory # doesn't exist, it will not fail. zip \ `# Options` \ --recurse-paths \ `# The name of the output file` \ ./module.zip \ `# The files that will be included.` \ module.json \ readme.md \ LICENSE \ languages/ \ scripts/ \ styles/ \ # Don't forget to add a backslash at the end of the line for any # additional files or directories! # Update the GitHub release with the manifest and module archive files. - name: Update Release with Files id: create_version_release uses: ncipollo/release-action@v1 with: allowUpdates: true name: ${{ github.event.release.name }} draft: ${{ github.event.release.unpublished }} prerelease: ${{ github.event.release.prerelease }} token: ${{ secrets.GITHUB_TOKEN }} artifacts: './module.json, ./module.zip' tag: ${{ github.event.release.tag_name }} body: ${{ github.event.release.body }}