name: Pull Request on: pull_request: paths: - api/** concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: lint-api: services: registry: # Using a local registry is ~3x faster than exporting the image to docker agent image: registry:2 ports: - 5000:5000 continue-on-error: true defaults: run: working-directory: api runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 with: persist-credentials: true - uses: docker/setup-buildx-action@v3 with: # network=host driver-opt needed to push to local registry driver-opts: network=host - name: Build and push uses: docker/build-push-action@v5 with: context: api target: builder push: true tags: localhost:5000/unraid-api:builder cache-from: type=gha cache-to: type=gha,mode=max - name: Lint run: | docker run localhost:5000/unraid-api:builder npm run lint test-api: services: registry: # Using a local registry is ~3x faster than exporting the image to docker agent image: registry:2 ports: - 5000:5000 defaults: run: working-directory: api runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 with: persist-credentials: true - uses: docker/setup-buildx-action@v3 with: # network=host driver-opt needed to push to local registry driver-opts: network=host - name: Build and push uses: docker/build-push-action@v5 with: context: api target: builder push: true tags: localhost:5000/unraid-api:builder cache-from: type=gha cache-to: type=gha,mode=max - name: Test run: | docker run localhost:5000/unraid-api:builder npm run coverage build-api: services: registry: # Using a local registry is ~3x faster than exporting the image to docker agent image: registry:2 ports: - 5000:5000 defaults: run: working-directory: api runs-on: ubuntu-latest outputs: API_VERSION: ${{ steps.build-pack-binary.outputs.API_VERSION }} API_MD5: ${{ steps.set-hashes.outputs.API_MD5 }} API_SHA256: ${{ steps.set-hashes.outputs.API_SHA256 }} steps: - name: Checkout repo uses: actions/checkout@v4 with: persist-credentials: true - uses: docker/setup-buildx-action@v3 with: # network=host driver-opt needed to push to local registry driver-opts: network=host - name: Build and push uses: docker/build-push-action@v5 with: context: api target: builder push: true tags: localhost:5000/unraid-api:builder cache-from: type=gha cache-to: type=gha,mode=max - name: Run Build run: docker run -e GIT_SHA=$(git rev-parse --short HEAD) -e IS_TAGGED=$(git describe --tags --abbrev=0 --exact-match) -v $(pwd)/deploy:/app/deploy/ localhost:5000/unraid-api:builder npm run build-pkg - name: Set Hashes id: set-hashes run: | API_MD5=$(md5sum ${{ github.workspace }}/api/deploy/release/*.tgz | awk '{ print $1 }') API_SHA256=$(sha256sum ${{ github.workspace }}/api/deploy/release/*.tgz | awk '{ print $1 }') echo "::set-output name=API_MD5::${API_MD5}" echo "::set-output name=API_SHA256::${API_SHA256}" - name: Upload tgz to Github artifacts uses: actions/upload-artifact@v4 with: name: unraid-api path: ${{ github.workspace }}/api/deploy/release/*.tgz - name: Parse Changelog id: changelog uses: ocavue/changelog-parser-action@v1 with: removeMarkdown: false filePath: "./api/CHANGELOG.md" - name: View release notes run: | escapedNotes=$(sed -e 's/[&\\/]/\\&/g; s/$/\\/' -e '$s/\\$//' <<<"${{steps.changelog.outputs.latestBody}}") echo "${escapedNotes}" build-plugin: defaults: run: working-directory: plugin runs-on: ubuntu-latest needs: [lint-api, test-api, build-api] steps: - name: Set Timezone uses: szenius/set-timezone@v1.2 with: timezoneLinux: "America/Los_Angeles" - name: Checkout repo uses: actions/checkout@v4 - name: Build Plugin run: | cd source/dynamix.unraid.net export API_VERSION=${{needs.build-api.outputs.API_VERSION}} export API_MD5=${{needs.build-api.outputs.API_MD5}} export API_SHA256=${{needs.build-api.outputs.API_SHA256}} bash ./pkg_build.sh s bash ./pkg_build.sh p - name: Create release notes run: | LAST_RELEASE=$(git tag --list --sort=v:refname | tail -1) echo ${LAST_RELEASE} RELEASE_NOTES=$(git log "$LAST_RELEASE...HEAD" --pretty=format:"- %s [\`%h\`](http://github.com/$GITHUB_REPOSITORY/commit/%H)" --reverse) echo "${RELEASE_NOTES}" # escapedNotes=$(sed -e 's/[&\\/]/\\&/g; s/$/\\/' -e '$s/\\$//' <<<"${RELEASE_NOTES}") # sed -i -z -E "s/(.*)<\/CHANGES>/\n${escapedNotes}\n<\/CHANGES>/g" "plugins/dynamix.unraid.net.staging.plg" - name: Upload binary txz and plg to Github artifacts uses: actions/upload-artifact@v4 with: name: connect-files path: | ${{ github.workspace }}/plugin/archive/*.txz ${{ github.workspace }}/plugin/plugins/*.plg retention-days: 5 if-no-files-found: error