diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4257311 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,139 @@ +name: Build DarkStore + +on: + push: + branches-ignore: [translation] + paths-ignore: + - 'README.md' + pull_request: + branches: ["*"] + paths-ignore: + - 'README.md' + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + container: devkitpro/devkitarm + name: Build with Docker using devkitARM + outputs: + commit_tag: ${{ steps.build.outputs.commit_tag }} + commit_hash: ${{ steps.build.outputs.commit_hash }} + author_name: ${{ steps.build.outputs.author_name }} + committer_name: ${{ steps.build.outputs.committer_name }} + commit_subject: ${{ steps.build.outputs.commit_subject }} + commit_message: ${{ steps.build.outputs.commit_message }} + steps: + - name: Checkout repo + uses: actions/checkout@v1 + with: + submodules: recursive + - name: Install tools + run: | + sudo apt-get update + sudo apt-get install p7zip-full -y + + curl -L https://github.com/Steveice10/bannertool/releases/download/1.2.0/bannertool.zip -o bannertool.zip + sudo 7z e bannertool.zip linux-x86_64/bannertool + sudo chmod +x bannertool + mv bannertool /usr/local/bin + rm bannertool.zip + curl -L https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.17/makerom-v0.17-ubuntu_x86_64.zip -o makerom-v0.17-ubuntu_x86_64.zip + sudo 7z e makerom-v0.17-ubuntu_x86_64.zip + sudo chmod +x makerom + mv makerom /usr/local/bin + rm makerom-v0.17-ubuntu_x86_64.zip + - name: Build + id: build + run: | + make clean + make -j$(nproc --all) + mkdir -p ~/artifacts + cp DarkStore.3dsx ~/artifacts + cp DarkStore.cia ~/artifacts + make clean + make -j$(nproc --all) citra + cp DarkStore.3dsx ~/artifacts/DarkStore-Citra.3dsx + cp DarkStore.cia ~/artifacts/DarkStore-Citra.cia + echo ::set-output name=commit_tag::$(git describe --abbrev=0 --tags) + echo ::set-output name=commit_hash::$(git log --format=%h -1) + + # Webhook info + echo "::set-output name=author_name::$(git log -1 $GITHUB_SHA --pretty=%aN)" + echo "::set-output name=committer_name::$(git log -1 $GITHUB_SHA --pretty=%cN)" + echo "::set-output name=commit_subject::$(git log -1 $GITHUB_SHA --pretty=%s)" + echo "::set-output name=commit_message::$(git log -1 $GITHUB_SHA --pretty=%b)" + - name: Publish build to GH Actions + uses: actions/upload-artifact@v2 + with: + path: ~/artifacts/* + name: build + +# Only run this for non-PR jobs. + publish_build: + runs-on: ubuntu-latest + name: Publish build to DarkStore/extras + if: ${{ success() && !startsWith(github.ref, 'refs/pull') }} + needs: build + env: + COMMIT_TAG: ${{ needs.build.outputs.commit_tag }} + COMMIT_HASH: ${{ needs.build.outputs.commit_hash }} + AUTHOR_NAME: ${{ needs.build.outputs.author_name }} + COMMIT_SUBJECT: ${{ needs.build.outputs.commit_subject }} + COMMIT_MESSAGE: ${{ needs.build.outputs.commit_message }} + outputs: + current_date: ${{ steps.commit.outputs.current_date }} + steps: + - name: Install tools + run: | + sudo apt-get update + sudo apt-get install qrencode -y + - name: Download artifacts + uses: actions/download-artifact@v2 + with: + name: build + path: build + - name: Upload to ${{ github.repository }} release + if: ${{ startsWith(github.ref, 'refs/tags') }} + run: | + ID=$(jq --raw-output '.release.id' $GITHUB_EVENT_PATH) + for file in ${{ github.workspace }}/build/*; do + AUTH_HEADER="Authorization: token ${{ secrets.GITHUB_TOKEN }}" + CONTENT_LENGTH="Content-Length: $(stat -c%s $file)" + CONTENT_TYPE="Content-Type: application/7z-x-compressed" + UPLOAD_URL="https://uploads.github.com/repos/${{ github.repository }}/releases/$ID/assets?name=$(basename $file)" + curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL" + done + - name: Commit and push to DarkStore-3DS/extras + id: commit + run: | + CURRENT_DATE=$(date +"%Y%m%d-%H%M%S") + echo ::set-output name=current_date::$CURRENT_DATE + git config --global user.email "bot@darkstore.com" + git config --global user.name "DarkStoreBot" + git clone --depth 1 https://${{ secrets.DSBOT_TOKEN }}@github.com/DarkStore-3DS/extras.git + mkdir -p extras/builds/DarkStore/ + cd extras/builds/DarkStore/ + qrencode -o DarkStore.png https://github.com/DarkStore-3DS/extras/raw/v$CURRENT_DATE/builds/DarkStore/DarkStore.cia + qrencode -o DarkStore-release.png https://github.com/DarkStore-3DS/DarkStore/releases/download/$COMMIT_TAG/DarkStore.cia + cp ${{ github.workspace }}/build/* . + git stage . + git commit -m "DarkStore | $COMMIT_HASH" + git tag v$CURRENT_DATE + git push origin master v$CURRENT_DATE + - name: Release to DarkStore-3DS/extras + run: | + AUTH_HEADER="Authorization: token ${{ secrets.DSBOT_TOKEN }}" + CONTENT_TYPE="Content-Type: application/json" + API_URL="https://api.github.com/repos/DarkStore-3DS/extras/releases" + RELEASE_INFO="{\"tag_name\": \"v${{ steps.commit.outputs.current_date }}\", \"name\": \"DarkStore | $COMMIT_HASH\", \"body\": \"$AUTHOR_NAME - $COMMIT_SUBJECT\n\n$COMMIT_MESSAGE\", \"prerelease\": true}" + RESPONSE=$(curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_TYPE" "$API_URL" -d "$RELEASE_INFO") + ID=$(echo $RESPONSE | jq --raw-output '.id') + for file in ${{ github.workspace }}/build/*; do + AUTH_HEADER="Authorization: token ${{ secrets.DSBOT_TOKEN }}" + CONTENT_LENGTH="Content-Length: $(stat -c%s $file)" + CONTENT_TYPE="Content-Type: application/7z-x-compressed" + UPLOAD_URL="https://uploads.github.com/repos/DarkStore-3DS/extras/releases/$ID/assets?name=$(basename $file)" + curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL" + done